2010-03-22 61 views

回答

0

是的,你可以。你將通過兩個查詢來完成。

首先選擇你的作者。

List<Authors> authors = context.Authors.ToList(); 

第二選擇你的書。

List<Books> books= 
        ( from b in context.Books 
          group b by b.AuthorName into groupedByAuthor 
          let maxDate = groupedByAuthor.Max(c=>c.PublishDate) 
          ... 
        ).ToList 

當你這樣做時,EF會填充作者的書。注意你的參考文獻不會被「加載」,但你的1本書將會在那裏。

試試吧...... EF的歡樂魔法。

0

我會做這樣的:

var list = (from a in Authors.Include("Books") 
      join b in books.OrderByDesc(b => b.PublishedDate).Take(1) 
       on a.Id equals b.AuthorId into bo 
      select new { Author = a, Books = b }).ToList(); 

List<Author> authors = list.Select(o => o.Author); 

其中作者是你的實體名稱和書籍的導航屬性的作者。您仍然擁有EntityCollection for Books,但它只應包含1個元素。

+0

我不相信在.include( 「書」)是必要的在這裏。任何條件標準(例如Take或甚至是它自己的連接)都會告訴EF這裏存在一些條件,它不應包含所有內容,因此.Include將被刪除。至少我是這麼理解的,而且我已經使用過這種語法。 – 2010-05-03 03:20:12

3

你不能使用.Include語法來做,但你可以使用投影。

var list = (from a in data.Authors 
      select new 
      { 
       Author = a, 
       Books = (from b in a.Books select b).Take(1) 
      }).ToList(); 

當你得到結果時,實現者將使用它的關係fixup,你將能夠使用list.Author.Books。

看到我的問題在: LINQ to Entities (Entity Framework) Join and .Include conflict

相關問題