2012-06-04 2 views
0

나는 다음과 같은 LINQ 문이 있습니다LINQ는 익명 형식의 컬렉션을 얻을

var query =(from item in _itemRepository.FindAll() 
      where item.Id == "20649458" 
       from singelitem in item.ListOfChildren 
       where singelitem.Property == "singelitem" 
       from manyitems in item.ListOfChildren 
       where manyitems.Property == "many" 
       select new 
          { 
           item.Id, 
           singelitem, 
           manyitems 
          }); 
var result = query.ToList(); 

작업이 개체의 컬렉션과 컬렉션의 tasks.Property == "something" 일치하는 여러 항목 절을하지만 난은 익명 형식을 사용할 때 선택에서, 나는 단지 작업 모음 대신에 일치하는 결과 중 하나의 항목 (첫 번째 항목) 만 얻는다. 어떻게하면 컬렉션에있는 모든 일치하는 작업을 다시 가져올 수 있습니까?

편집 : 정말로 실제로 발생하는 것은 플랫 개체를 얻는 것입니다 (조인 문의 결과 집합과 마찬가지로).

+1

'ToList();'확장 메소드를 사용하여 결과 콜렉션을 구체화합니다. – MarcinJuraszek

답변

3

익명 형식을 사용하지 않으면 액세스 할 때 작업을 지연로드하는 엔터티 클래스를 처리하게됩니다. 결과와 함께 작업을로드하려면 열심히 자식로드 메소드 포함을 사용하십시오. How do you construct a LINQ to Entities query to load child objects directly, instead of calling a Reference property or Load()

+0

그게 정말 중요하지 않습니다, 그 작업 이후 내가 목록되고 싶어요. 하나의 항목 (결과) 작업 목록이 필요합니다. – randoms

+0

@randoms 업데이트 된 답변보기 –

+0

감사합니다. Hasan :) – randoms

0

이것은 Linq의 적절한 동작입니다. 실제로 당신이 기대하는 것은 불가능합니다. item.Id == "123"과 일치하는 단일 항목이 필요합니다. 둘 이상이라면? 일치하는 각 항목에 대해 익명 항목을 만듭니다. 첫 번째 "from"문장을 두 번째 문장과 바꾸는 것을 생각해보십시오. 너는 무엇을 기대 하느냐?

또한 첫 번째 "시작"문과이 쿼리를 "이상한"문구로 만드는 두 번째 문과의 관계가 없습니다. 왜 쿼리를 2로 분할하지 않을까요? 원하는 속성을 가진 새로운 객체를 생성 할 수 있습니까?

관련 문제