C# Linq查询中的计数
我在数据库中使用了一个相当复杂的连接查询。运行它之后,我得到的结果包含一个baseID和一堆其他字段。然后,我想获取此baseID并确定它在如下表中出现的次数: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
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声誉系统的一部分。人们会得到选票作为回报。