这样的事情会严重影响性能吗?
var myQuery = from c in Customers select c; var filter1 = from c in myQuery where c.ID > 2 select c; myQuery = filter1; var filter2 = from c in myQuery where c.Name.Contains("r") select c; myQuery = filter2;
当我这样做时,它似乎只在最后进行实际查询,而不是每个"var ...".到目前为止的所有内容似乎只是构造一个查询,所以看起来这样可以,并且与将所有过滤器放在1个查询中的性能差别不大.我错了,它实际上是在对数据库运行多个查询?
我正在尝试找出一种基于用户输入创建查询的好方法,以便他们可以根据不同的标准进行过滤.只要这样做不会占用大量时间,我就不会太担心性能.
我还发现了关于Dynamic Linq库的帖子,但使用它看起来很笨拙,我没有看到这样做的差别太大.
不,在您开始实际要求结果之前,它不会执行任何查询.以这种方式构建查询很好,这是LINQ的一个好处.
顺便说一下,它在LINQ to Objects中的工作方式相同(在延迟执行方面 - 实际的管道非常不同),只要你使用一个惰性查询操作符(基本上所有返回一个IEnumerable
或者IOrderedEnumerable
).