使用linq c#在对象集合下重写值的总和

时间:2015-12-16 15:50:15

标签: c# linq lambda entity-framework-6 iteration

我是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的帮助下我能够解决这个问题。但是在复杂的对象中,由于数据库庞大,它需要花费太多时间来执行。

1 个答案:

答案 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));