2010-12-07 3 views
2

IQueryable 목록이 있습니다. 이 목록을 첫 번째 목록의 특정 필드 (fieldnum)에 일치하는 배열로 분할하려고합니다 ...LINQ : 필드가 참조 필드가 아닙니다.

예를 들어 fieldnum == 1 인 경우 배열 [1]로 이동해야합니다. . 그러나

var allItems = FillListofMyObjects();   
var Filtered = new List<IQueryable<myObject>(MAX+1); 

for (var i = 1; i <= MAX; i++) 
{ 
     var sublist = allItems.Where(e => e.fieldnum == i); 
     if (sublist.Count() == 0) continue; 

     Filtered[i] = sublist; 
} 

, 나는 오류 필드 "t1.fieldnum"을 받고있어에 참조 필드되지 않습니다 :()이 필드를 기준으로 필터하기 위해, 그것은 다음과 같이 보입니다 어디에서 사용하고 if line. 디버거를 단계별로 실행하면 오류가 실제로 행 (Where() 메서드)에서 발생하지만 실제로는 잘못된 것이 무엇인지 알 수 없습니다.

저는 LINQ에 새로운 것이므로,이 모든 것을 잘못하고 있다면 저에게 알려주세요. 고마워요!

+0

오류가 발생하면 null입니까? – tbischel

+0

아니요, MyObject 유형의 IQueryable로 채워집니다. – SelAromDotNet

+0

어떤 공급자를 사용하고 있습니까? –

답변

4

ToLookup을 사용하지 않으시겠습니까?

var allItemsPerFieldNum = allItems.ToLookup(e => e.fieldnum); 

값을 구할 때마다 표현식을 재평가해야합니까?

+0

흥미 롭습니다! 이게 내가 ToLookup 메서드에 대해 들어 본 첫 번째예요, 시도해 볼게요, 고마워요! – SelAromDotNet

+0

와우는 완벽하게 작동했습니다! 고마워, 원래 오류가 뭔지 확실하지 않지만이 완전히 문제없이, 감사합니다! – SelAromDotNet

2

왜 사전을 사용하지 않습니까?

var dictionary = allItems.ToDictionar(y => y.fieldnum); 
+0

각 필드 넘버는 하나 이상의 객체를 가질 수 있기 때문에 ToLookup은 더 나은 데이터 구조이지만 감사합니다! – SelAromDotNet

관련 문제