2017-03-23 7 views
1

LINQ를 사용하여 쿼리 할 수있는 모든 개체를 구체화 할 수 있습니까?쿼리 할 수있는 모든 개체 구체화

의 내가 몇 가지 기준에 따라 자신의 책 (이 좀 실제 클래스가 필요하지 않습니다 희망, 예를 들어 쿼리입니다)의 목록이 저자의 목록을 원하는 가정 해 봅시다 :

var authorData = from a in ctx.Authors 
       where a.Age > 30 
       select new // anon class 
       { 
        Name = a.Name, 
        City = a.Address.City, 
        Books = from b in ctx.Books 
          where b.Price > 10 
          && b.AuthorId == a.Id 
          select new // anon class 
          { 
           Name = b.Name, 
           Price = b.Price, 
          } 
       }; 

지금 저자 authorData을 반복하고 인쇄 책 수를 말하면됩니다. 도서 목록은 유형이 IQueryable이 될 것이고 각 저자에게 해당 객체를 가져 오는 것은 피할 수있는 DB에 새로운 쿼리를 생성합니다.

foreach(var author in authorData.ToList()) 
{ 
    Console.WriteLine(author.Books.Count()); 
} 

각 작성자에 대해 새로운 SQL 쿼리를 피하는 방법은 무엇입니까? 저자 익명 클래스와 동시에 Book 익명 클래스 객체를 구체화하는 방법이 있습니까?

편집 : 최종 목표는 가능한 한 적은 DB 독서을 가지고 있지만 모든 AuthorBook 오브젝트를하는 것입니다. 모든 foreach 루프 반복에서 책을 구체화하는 것은 끔찍한 것 같습니다.

나는 심지어 사전 또는 저자/도서 연결이 편리하게 뭔가 같은 분리 수거에 예약 객체를 얻을 것이라고 답변을 받아 들일 것이지만, 필요하지 않습니다

많은 DB는

답변

-2
var authorData = (from a in ctx.Authors 
      where a.Age > 30 
      select new // anon class 
      { 
       Name = a.Name, 
       City = a.Address.City, 
       Books = from b in ctx.Books 
         where b.Price > 10 
         && b.AuthorId == a.Id 
         select new // anon class 
         { 
          Name = b.Name, 
          Price = b.Price, 
         } 
      }).ToList(); 
+0

내가 처음 시도한 것이지만 여전히 IQueryable로 책의 anon 클래스를 남깁니다. –

0

당신은 ToList를 사용할 수 읽기() 메소드를 사용한다.

var authorData = (from a in ctx.Authors 
     where a.Age > 30 
     select new // anon class 
     { 
      Name = a.Name, 
      City = a.Address.City, 
      Books = (from b in ctx.Books 
        where b.Price > 10 
        && b.AuthorId == a.Id 
        select new // anon class 
        { 
         Name = b.Name, 
         Price = b.Price, 
        }).ToList() 
     }).ToList(); 
foreach(var author in authorData) 
    { 
    Console.WriteLine(author.Books.Count()); 
    } 
+0

이것은 내가 예외를주는 ... –

+0

@ TadijaBagarić 예외는 무엇입니까? –

+0

예외가 b.Price가 nullable로 인해 발생한다고 생각합니다. 이 값을 b.Price로 변경하면이 문제를 해결할 수 있습니다. 0. 익명 유형은 동일한 순서와 유형이 필요합니다. 따라서 Price는 아마도 int이므로 가격이 null이면 예외가 발생합니다. –