C# Linq查询中的计数

C# Linq查询中的计数,c#,linq,C#,Linq,我在数据库中使用了一个相当复杂的连接查询。运行它之后,我得到的结果包含一个baseID和一堆其他字段。然后,我想获取此baseID并确定它在如下表中出现的次数: TableToBeCounted (One to Many) { baseID, childID } select new {c.ClassID, c.Name, o.Count()}//Or something like that. 如何执行linq查询,该查询仍然使用我已有的查询,然后将count()与bas

我在数据库中使用了一个相当复杂的连接查询。运行它之后,我得到的结果包含一个baseID和一堆其他字段。然后,我想获取此baseID并确定它在如下表中出现的次数:

TableToBeCounted (One to Many)
{
     baseID,
     childID
}
select new {c.ClassID, c.Name, o.Count()}//Or something like that.
如何执行linq查询,该查询仍然使用我已有的查询,然后将count()与baseID连接起来

在未经测试的linq代码中类似于此:

from k in db.Kingdom
join p in db.Phylum on k.KingdomID equals p.KingdomID
where p.PhylumID == "Something"
join c in db.Class on p.PhylumID equals c.PhylumID
select new {c.ClassID, c.Name};
然后,我想获取该代码并计算每个类中嵌套了多少个订单。然后,我想使用linq追加一列,以便最终选择如下所示:

TableToBeCounted (One to Many)
{
     baseID,
     childID
}
select new {c.ClassID, c.Name, o.Count()}//Or something like that.
整个示例基于生物分类系统

例如,假设我有多个表:

Kingdom
|--Phylum
    |--Class
       |--Order
每个门都有一个门ID和一个王国ID。这意味着所有门都是一个王国的子集。所有订单都是类ID的子集。我想计算每个类的订单数量

select new {c.ClassID, c.Name, (from o in orders where o.classId == c.ClassId select o).Count()}

这对你有可能吗?在不了解拱门的情况下,我能做的最好

如果关系如您所述:

  var foo = db.Class.Where(c=>c.Phylum.PhylumID == "something")
                    .Select(x=> new { ClassID = x.ClassID, 
                                      ClassName = x.Name, 
                                      NumOrders= x.Order.Count})
                    .ToList();

旁白:你为什么要加入这些实体?它们不应该自然地被FK'd,因此不需要显式联接吗?

我为
(来自orders中的o…
部分)得到这个错误:
错误16无效的匿名类型成员声明符。匿名类型成员必须使用成员分配、简单名称或成员访问来声明。
我的想法是正确的,但上面的代码不会编译(至少在我的情况下),它需要添加一个命名属性:
选择新的{c.ClassID,c.name,**Count**=from o,顺序为o.ClassID==c.ClassID select o.Count()}
我没有尝试你的代码,因为我的情况得到了解决,但感谢FK的东西。穿越linq变得非常容易。我的数据表中有一点空白,但是多对多仍然需要连接;这很好。除了将最好的答案标记为“接受答案”之外,还可以随意投票选出对你有帮助的答案。这是StackOverflow声誉系统的一部分。人们会得到选票作为回报。