具有2个谓词的Linq-to-Objects Where子句

时间:2011-05-27 22:11:29

标签: linq-to-objects

最好有2个Where子句或1个Where子句与&&算子还是无所谓?

list.Where(x => x.Prop1 == value1).Where(x => x.Prop2 == value2).ToList();

或者

list.Where(x => x.Prop1 == value1 && x.Prop2 == value2).ToList();

1 个答案:

答案 0 :(得分:5)

最好在单个lambda中使用第二个和两个测试。它只会循环列表一次,并且只会经常调用一半代表。第一个版本循环列表两次。

为了清楚起见,这是更好的选择:

list.Where(x => x.Prop1 == value1 && x.Prop2 == value2).ToList();

也可以写

var results =
   (from x in list
   where x.Prop1 == value1 && x.Prop2 == value2
   select x).ToList();

如果您可以避免.ToList()来电并将其用作IEnumerable<T>,那么通常会获得更好的性能(除非您反复阅读)。