C# EF4 Linq-使用相关表中的条件获取顶级项
我有3个表需要包含在EF4中的linq查询中。Am还使用dbcontext生成器生成poco类。linq查询正在查询poco对象 希望下面能够清楚地解释表在底层数据库中的关系 订单详细信息>-1书籍1-<书籍类别 正如您所看到的,一本书可以有许多类别,一本书可以出现在许多订单上 我正在努力获得某一特定类别的畅销书 到目前为止,我已经成功地获得了如下所示的畅销书,但我似乎无法将其扩展到将图书类别作为where子句中的标准C# EF4 Linq-使用相关表中的条件获取顶级项,c#,linq,entity-framework,entity-framework-4,linq-to-entities,C#,Linq,Entity Framework,Entity Framework 4,Linq To Entities,我有3个表需要包含在EF4中的linq查询中。Am还使用dbcontext生成器生成poco类。linq查询正在查询poco对象 希望下面能够清楚地解释表在底层数据库中的关系 订单详细信息>-1书籍1-
var topSellingBooks = (from p in this.context.OrderDetails
where p.IssueId == issueId && p.PublicationId != "4TC"
group p by p.BookId
into bookGroup
select new
{
BookNo = bookGroup.Key,
BookCount = bookGroup.Sum(q => q.Quantity)
}).OrderByDescending(q => q.BookCount)
.Take(noOfBooks);
使用导航属性,我希望可以添加
&& p.Books.BookCategories.CategoryId_FK=="MyCatId"
我的where标准高于上述标准,但这似乎不可能。我无法使用上面的方法访问BookCategories的属性
这些信息是否足以说明发生了什么。有人有什么建议吗
谢谢
机翼似乎是装载策略有问题。 您需要在查询中删除相关对象 您可以在本页上找到许多示例,例如:
var blogs = context.Blogs
.Include(b => b.Posts.Select(p => p.Comments))
.ToList();
如果你已经正确设置了延迟加载,我认为你不需要使用include,对吗?是否启用了延迟加载?BookCategories属性是否标记为virtual?可能我没有正确解释表关系。请参阅修订后的导言。我还将dbcontext生成器用于poco类。@wingyip:您是否尝试以与我的示例和链接类似的方式包含
书籍
?是的,但没有乐趣。此外,在我的EF版本中,您在上面的Include中使用的括号中的语法不被识别。当您说“无法访问BookCategories的属性”时,您的意思是什么?你得到一个空引用吗?空的收藏?EF正在生成什么sql?(string sql=topSellingBooks.ToString();
)