2009-07-02 138 views
0

我有以下代码:结合LinqToSql查询

List<T> list = new List<T>(); 

IEnumerable<T> query1 = ... 
IEnumerable<T> query2 = ... 
IEnumerable<T> query3 = ... 

list.AddRange(query1.ToList<T>()); 
list.AddRange(query2.ToList<T>()); 
list.AddRange(query3.ToList<T>()); 

据我所知,这将引起跳闸到每个ToList方法在查询中使用时的数据库。

我该如何组合查询,以便只有一次旅行到数据库?

回答

1

你也许可以将它们联合起来。

list.AddRange(query1.Union(query2).Union(query3)); 
1

如果Union或Concat最终没有减少对数据库的调用次数,我至少会摆脱那些ToList()调用。 AddRange需要一个IEnumerable,并且您的查询已经是IEnumerable。在您的查询中调用ToList()只是意味着您的项目会枚举两次 - 一次将查询转换为列表,第二次将列表添加到主列表中。