多个LinqToSQL查询和性能

时间:2009-01-26 19:59:31

标签: .net sql linq linq-to-sql

这样的事情是否会严重影响性能?

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库的帖子,但使用它看起来很笨拙,我觉得这样做并没有太大的区别。

2 个答案:

答案 0 :(得分:6)

不,在您开始实际询问结果之前,它不会执行任何查询。以这种方式构建查询很好,这是LINQ的一个好处。

它在LINQ to Objects中的工作方式相同,顺便说一下(就延迟执行而言 - 实际的管道是非常不同的),只要你使用一个懒惰的查询操作符(基本上所有返回一个IEnumerable<T>IOrderedEnumerable<T>)。

答案 1 :(得分:3)

我会看一下使用Extension方法动态构造查询。我认为它将完全符合您的需要。并且,是的,在执行需要结果的操作之前,实际上不会评估查询,因此组合它们不一定会导致额外的数据库访问。

var query = db.Customers;
if (selectID.HasValue)
{
   query = query.Where( c => c.ID > selectID.Value );
}
if (!string.IsNullOrEmpty( nameFilter ))
{
   query = query.Where( c => c.Name.Contains( nameFilter ) );
}

foreach (var customer in query) // now the query is performed
{
 ...
}
相关问题