使用 linq c# 检索对象集合下的值总和
Retriving Sum of values under object collection using linq c#
我是linq的菜鸟。并想用 linq 解决这个问题,这样我就可以节省一些服务器行程。
对象结构如下
EntityA{
int Id,
string Name,
EntityB entityb
}
EntityB{
int idb,
string type,
ICollection<EntityC> entityc
}
EntityC{
int idc,
ICollection<EntityD> entityd
}
EntityD{
int idd,
ICollection<EntityE> entitye
}
EntityE{
int ide,
int valuepoint
}
我需要使用 EntityD 中的值点的总和来检索特定的(在某些条件下)EntityA。目前我正在通过常规迭代器来完成。从 EntityB 检索集合并存储在 List 中,并在 foreach 的帮助下我能够解决这个问题。但是在复杂的对象中,由于数据库很大,执行起来会花费太多时间。
一种方式:
var results=db.EntitiesA.Sum(a=>a.EntitiesB.Sum(b=>b.EntitiesC.Sum(c=>c.EntitiesD.Sum(d=>d.ValuePoint))));
另一种方式:
var results=db.EntitiesA.Sum(a=>a.EntitiesB
.SelectMany(b=>b.EntitiesC)
.SelectMany(c=>c.EntitiesD)
.Select(d=>d.ValuePoint));
我是linq的菜鸟。并想用 linq 解决这个问题,这样我就可以节省一些服务器行程。
对象结构如下
EntityA{
int Id,
string Name,
EntityB entityb
}
EntityB{
int idb,
string type,
ICollection<EntityC> entityc
}
EntityC{
int idc,
ICollection<EntityD> entityd
}
EntityD{
int idd,
ICollection<EntityE> entitye
}
EntityE{
int ide,
int valuepoint
}
我需要使用 EntityD 中的值点的总和来检索特定的(在某些条件下)EntityA。目前我正在通过常规迭代器来完成。从 EntityB 检索集合并存储在 List 中,并在 foreach 的帮助下我能够解决这个问题。但是在复杂的对象中,由于数据库很大,执行起来会花费太多时间。
一种方式:
var results=db.EntitiesA.Sum(a=>a.EntitiesB.Sum(b=>b.EntitiesC.Sum(c=>c.EntitiesD.Sum(d=>d.ValuePoint))));
另一种方式:
var results=db.EntitiesA.Sum(a=>a.EntitiesB
.SelectMany(b=>b.EntitiesC)
.SelectMany(c=>c.EntitiesD)
.Select(d=>d.ValuePoint));