2013-03-16 46 views
2

GroupJoin後,我想包括Book.Authors,因爲字段Book.Authors將爲空。 但我不能。我該怎麼做才能解決這個問題?Group加入幷包括

Queryable<NewRead> recent = Repository.NewReads.Where(x => x.UserId == usersId); 

var newFavs = IsAuthorized ? Repository.NewFavs.Where(x => x.UserId == UserId) : Repository.NewFavs.Where(x => false); 

var recentFavorite = recent.GroupJoin(newFavs, 
          x => x.BookId, 
          y => y.BookId, 
          (x, y) => new {Recent = x, Favorite = y, x.Book}); 

我想:

var recent = Repository.NewReads.Include("Book.Authors") 
        .Where(x => x.UserId == usersId); 

var newFavs = IsAuthorized ? Repository.NewFavs.Include("Book.Authors").Where(x => x.UserId == UserId) : Repository.NewFavs.Where(x => false); 

而這一切都在一起。 它在GroupJoin之前工作,但在Authors字段丟失之後。 如果我添加:

var recentFavorite = recent.GroupJoin(newFavs, 
          x => x.BookId, 
          y => y.BookId, 
          (x, y) => new {Recent = x, Favorite = y, x.Book, x.Book.Authors}); 

所有工作正常,但它不是解決方案。

+0

什麼LINQ提供您使用的呢? LINQ to SQL? LINQ to Entities?還有別的嗎? – svick 2013-03-16 15:20:58

+0

很多人都說分組後形狀變化,都包括忽略。 – 2013-03-16 16:14:39

+0

Linq to sql我認爲。因爲使用存儲庫,但不是DBContext。 – 2013-03-16 16:31:28

回答

0

可以

var recent = Repository.NewReads.Include(x => x.Book.Authors) 
         .Where(x => x.UserId == usersId); 
+0

我試過了:var recent = Repository.NewReads.Include(「Books.Authors」) .Where(x => x.UserId == usersId); – 2013-03-16 11:31:27

+0

你使用LINQ到SQL? 「包含」標題建議實體框架。 – 2013-03-25 09:13:21

0
var recent = Repository.NewReads.Include("Book").Where(n => n.UserId == usersId).FirstOrDefault().Book.Select(b=>b.Authors); 
+0

.Book.Select(b => b.Authors);書是字段(不可查詢)我們如何做選擇?我認爲它不會幫助,因爲我嘗試了類似的東西。但是在GroupJoin全部包含丟失之後。 – 2013-03-16 11:37:24

+0

您能否詳細解釋一下數據庫中的表和模型之間的關係? – 2013-03-16 13:06:26

+0

是的,有NewFav,NewReads,Books,Users,Authors表。 NewFav,NewReads鏈接到Book(專欄BookID),作者也有專欄BookID。 NewFav和NewReads有UserID列。 – 2013-03-16 14:17:04