2011-10-06 3 views
0

내 코드 : 그것이 좋은 별개의 후 keys 정상 컬렉션이이후에 IQueryable 수집의 실제 수를 가져옵니다 고유()

IQueryable<string> keys = dr.Localization.GetQuery().Select(x => x.Key).Distinct(); 
int count = keys.Count(); 

컬렉션. 그러나 keys.Count()에는 뚜렷한 표가없는 모든 행의 수가 있습니다. 내 ORM은 NHibernate입니다.

IQueryable 컬렉션의 실제 카운트를 얻으려면 어떻게해야합니까? (다른 컬렉션 유형으로 캐스트하지 않음)

고마워요!

+0

당신의 LINQ 공급자가 궁극적으로 SQL을 생성하는 경우를, 저것 좀 봐. 분명히 "잘못된"결과를 반환하는 쿼리의 끝 부분에 "뚜렷한"표시가있을 수 있습니다. – dlev

답변

0

쿼리 가능한 공급자가 버그가있는 것 같습니다. 아마도 해당 버그를보고해야합니다.

한편 정확하게 카운트를 얻는 한 가지 방법은 keys.AsEnumerable().Count()입니다. 그러나 이것은 전체 컬렉션의 평가를 유발할 것입니다. 따라서 결과 집합에 많은 항목이 있으면 개수를 얻기 위해 모두 검색합니다.

시도 할 수있는 또 다른 옵션은 keys.GroupBy(k => k).Count() 또는 아마도 Distinct()없이 동일하게 사용하는 것입니다.이 경우에도 동일한 버그가 존재하지 않기를 바랍니다.

0

Count() 호출이 카운트 만 선택하는 SQL 쿼리로 변환되지 않는 한 Count() 확장 메서드는 모든 개체를 열거해야합니다. 변수에 키를 넣었으므로 나중에 필요하다고 가정합니다. 아마도 열거 할 수 있습니다. 그래서 당신은 모든 바로 여기 너무

string[] keys = dr.Localization.GetQuery().Select(x => x.Key).Distinct().ToArray(); 
int count = keys.Length; 

등을 가져올 수있다하지만이 생산 (쿼리 및 결과) 무엇을 당신의 예에서 궁금 :

int count = dr.Localization.GetQuery().Select(x => x.Key).Distinct().Count();