Linq to sql 有关意外LINQ查询结果的帮助

Linq to sql 有关意外LINQ查询结果的帮助,linq-to-sql,Linq To Sql,我有这4张桌子: 这个问题 var query = db.Authors .Where(x=> x.ItemAuthors .Any(z=> z.Item.CategoryItems .Any(b=> b.categoryID == 10))) .Select(ci=> new

我有这4张桌子:

这个问题

    var query = db.Authors
                    .Where(x=> x.ItemAuthors
                        .Any(z=> z.Item.CategoryItems
                            .Any(b=> b.categoryID == 10)))
                    .Select(ci=> new
                {
                    authorText = string.Format("{0} ({1})", ci.text, 
                                                       ci.ItemAuthors.Count()),
                    authorId = ci.authorID
                });
它填充按预期工作的“作者”下拉列表。问题是,当我试图计算分配给每个作者的项目数时,它会计算作者在整个项目表中拥有的每个项目

例如,如果author one总共有10本书,但在上面的查询中只显示了其中的2本,那么我仍然得到了10本书的计数。当我将同一个查询绑定到一个控件时,我返回了正确的数据,只是计数操作不能正常工作

重申一下,我将其绑定到gridview,每个作者只看到一本书,而不是作者写的所有书。看来我的查询应该是正确的

更新:@Jon Skeet,我无法使用
let
操作符,因为我正在有条件地构建查询。我通过使用原始查询获取计数来解决问题。下面是我如何修改原始的
Count()
语法:

var query = authors2.Select(x => new
            {

                authorText = string.Format("{0} ({1})",x.text, x.ItemAuthors
                        .Where(qq=> qq.Item.CategoryItems
                            .Any(xt=> xt.categoryID == 10))
                            .Count()),
                authorId = x.authorID

            });

您使用的是直接返回到完整表的
i.Author.ItemAuthors.Count()。我想你可能想要这样的东西:

var query = from ia in db.ItemAuthors
            let count = ia.CategoryItems.Count(t => t.categoryID == 10))
            where count > 0
            select new
            {
                authorText = string.Format("{0} ({1})", i.Author.text, count),
                authorId = i.Author.authorID
            };
另一方面,我希望每个ItemAuthor得到一个结果,这并不是您真正想要的结果。如果需要作者列表,我希望查询从authors表开始:

var query = from author in db.ItemAuthors
            let count = author.Items
                              .Count(ia => ia.Item.CategoryItems
                                                  .Any(ci => ci.CategoryID == 10))
            select new
            {
                authorText = string.Format("{0} ({1})", author.text, count),
                authorId = author.authorID
            };
换句话说,对于每个作者,找出有多少项至少有一个ID为10的类别。。。然后报告许多项目


这有点复杂,因为有各种各样的1-many关系(每本书都可能有多个作者和多个类别)。

您还没有显示您试图进行计数的代码。。。请显示不起作用的代码。它在我的select new语句中,通过
authorText
你必须滚动。哎哟-因为滚动,我没有看到它。它值得格式化,这样我们就不必这样做。。。现在回答。它说的是
author.Items
没有包含计数的定义。@Nick:
author.Items
的类型是什么?我认为应该是
Item
,这是Items表类。我已经更新了问题中的代码,以反映authors表。@尼克:您没有显示的是类之间的所有关系。您已经显示了表,但没有显示实体中的关系。但希望我已经给了你足够的一个开始,让你自己解决剩下的问题。我更新了我的问题,以反映我是如何解决这个问题的。不过,我会接受你的回答,因为它让我走上了正确的道路。谢谢