lambda扩展来组合列表

时间:2009-06-03 00:49:43

标签: linq lambda

如何使用第二个表达式只选择第一个带有ID的那个?

 var list1= from x in objects select x.id;


 results=results.Where(r=>r.id==  ????  )  

我希望结果只是那些来自listA

的id

TIA

编辑:我的立场得到了纠正,还有另一个问题导致我将单独提出问题。

6 个答案:

答案 0 :(得分:4)

像这样...

results.Where(r=>list1.Contains(r.id))

答案 1 :(得分:4)

results = results.Where(r => list1.Contains(r.id));

答案 2 :(得分:4)

有点猜测(还没试过运行它),但是:

var filteredResults = from obj in objects 
                      join result in results on obj.id equals result.id
                      select result;

请注意,这应该替换您问题中的两行代码。

答案 3 :(得分:2)

如果你想要一些性能(list.Contains()具有O(n)复杂度)你可以使用

var ids = objects.ToDictionary(o => o.id);

results.Where(o => ids.ContainsKey(o.id));

答案 4 :(得分:0)

也许你想要这个呢?

results.Where(r => objects.Any(o => o.id == r.id))

答案 5 :(得分:0)

如果您始终只需要第一个元素的ID,您可以将其存储到变量并将其用于lambda表达式

var results= from x in objects select x.id;
int firstID = results.First().id ;
results=results.Where(r=>r.id==  firstID  )

或者,直接使用:

var results= from x in objects select x.id;
results=results.Where(r=>r.id==  results.First().id  )