2011-06-12 51 views
1

考慮圖片中的數據庫模式。linq-to-entities連接3個表和分組語句

我需要一個LINQ到實體語句將檢索按作者分組作者和他們各自的書。例如,我想要顯示如下內容:

 
authorName8 
    bookTitle27 
    bookTitle35 
    bookTitle62 
authorName37 
    bookTitle9 
    bookTitle51 

另一個約束是分組項的主題必須可以通過方法返回。

任何人都可以制定連接和分組聲明(a)按作者姓名排序,(b)按作者姓名和書名排序?

+0

'EF'生成了哪些模型? 'Author'和'Book'? – aligray 2011-06-12 08:55:35

回答

1

您沒有提到您使用的是哪個版本的EF,或者您是否需要根據某些條件過濾作者,或者是通過某種條件過濾書籍。這將獲取所有的一般查詢將是這樣的:

List<Author> authorsWithBooks = 
       context. 
       Authors. 
       Include(a => a.Books). // For EF 4.1 
       /*Include("Books"). instead for previous versions of EF */ 
       /*Where(a => !a.IsDeleted). if you want to filter the authors */ 
       ToList(); 

如果你要過濾的藏書,你將不得不雖然寫一個更復雜的查詢。

+0

:我有一個技術難題 - 可能是因爲我使用了代碼優先(?) - 讓我的方法適用於我的案例,但我傾向於相信Include方法可能會對分組技巧負責。 – user669226 2011-06-13 03:53:14

+0

@Yakimich ::你如何控制作者姓名和書名的排序? – user669226 2011-06-13 09:37:45

+0

要命令作者在'Include'之後添加'OrderBy(a => a.Name)'。不過,訂購這些書更具挑戰性。你使用EF 4.1嗎? – Yakimych 2011-06-13 10:14:33

0

var query =(來自MyDataContext.Aurthor選擇作者的顧客) 。包括(author => author.Books);

這將讓你所有的作者和渴望加載書籍的最佳性能。