2017-03-23 73 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查詢?有沒有辦法讓書籍匿名類對象與作者匿名類同時實現?

編輯: 的最終目標是讓儘可能少的DB讀數可能的,但有所有的AuthorBook對象。在每個foreach循環迭代中實現書籍看起來很可怕。

我甚至會接受一個答案,將得到像詞典之類的,讓作者/預訂連接方便單獨藏書的對象,但並不需要很多數據庫讀取

回答

-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離開課堂。 –

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爲空的。你可以通過改變這個來解決這個問題b.Price? 0.匿名類型需要相同的順序和類型。所以價格可能是整數,如果價格爲空,這會導致豁免。 –

相關問題