2009-07-02 162 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()只是意味着您的項目會枚舉兩次 - 一次將查詢轉換爲列表,第二次將列表添加到主列表中。