在为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" )
一方是否有任何好处?
在这个例子中不要过多担心数据类型,但是如果数据类型存在问题,那么也应该知道。
显而易见的一点是该对象已被引用,因此在应用程序中一次点击两个属性会更容易吗?
答案 0 :(得分:3)
在你的例子中,它们是相同的,它们是个人偏好的问题。由于LINQ的延迟执行,集合将只迭代一次。
如果要使用or运算符组合表达式,则只能使用第一个表达式。
答案 1 :(得分:0)
第一个稍微快一点,因为它有点减少了开销。除此之外,它们的处理方式基本相同。
但是,一个值得注意的区别是, Color
属性在第二个示例中的Age
属性之前进行了比较。如果你想要一个更便宜的比较短路更昂贵的一个(所以Color
属性只比较Age
比较为真的项目),你应该把更便宜的一个放在最后Where
致电:
var blackOldCats =
cats
.Where(cat => cat.Colour == "noir")
.Where(cat => cat.Age > 7);
在这种情况下,比较的成本没有太大差异,但如果一个比另一个贵得多,那么知道它们的评估顺序是很好的。
击>