2009-07-02 3 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()를 호출하면 항목이 두 번 열거된다는 의미입니다. 한 번은 쿼리를 List로 변환하고 두 번째는 목록을 주 목록에 추가합니다.