Linq Where子句 - 更好地堆叠或组合?

时间:2010-03-24 08:42:25

标签: c# linq-to-objects

在为LINQ编写方法链时,我可以用两种方式之一做Where语句:

var blackOldCats = cats.Where(cat => cat.Age > 7 && cat.Colour == "noir" )

var blackOldCats = cats.Where(cat => cat.Age > 7).Where(cat => cat.Colour == "noir" )

一方是否有任何好处?

在这个例子中不要过多担心数据类型,但是如果数据类型存在问题,那么也应该知道。

显而易见的一点是该对象已被引用,因此在应用程序中一次点击两个属性会更容易吗?

2 个答案:

答案 0 :(得分:3)

在你的例子中,它们是相同的,它们是个人偏好的问题。由于LINQ的延迟执行,集合将只迭代一次。

如果要使用or运算符组合表达式,则只能使用第一个表达式。

答案 1 :(得分:0)

第一个稍微快一点,因为它有点减少了开销。除此之外,它们的处理方式基本相同。

但是,一个值得注意的区别是,Color属性在第二个示例中的Age属性之前进行了比较。如果你想要一个更便宜的比较短路更昂贵的一个(所以Color属性只比较Age比较为真的项目),你应该把更便宜的一个放在最后Where致电:

var blackOldCats =
  cats
  .Where(cat => cat.Colour == "noir")
  .Where(cat => cat.Age > 7);

在这种情况下,比较的成本没有太大差异,但如果一个比另一个贵得多,那么知道它们的评估顺序是很好的。