我是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中的valuepoint的SUM检索特定的(有一些条件)EntityA。目前我正在通过常规迭代器来完成它。从EntityB检索集合并存储在List中,并在foreach的帮助下我能够解决这个问题。但是在复杂的对象中,由于数据库庞大,它需要花费太多时间来执行。
答案 0 :(得分:1)
一种方式:
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));