2015-12-16 3 views
1

Я довольно новичок в linq. И хотел решить эту проблему с помощью linq, чтобы я мог сэкономить некоторые серверные поездки.Retriving Сумма значений в коллекции объектов с использованием linq C#

Следующая структура объекта.

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 
} 

Мне нужно, чтобы получить частности (с некоторым условием) EntityA с суммой ValuePoint, которая находится в EntityD. В настоящее время я делаю это через регулярный итератор. Получение коллекции из EntityB и сохранение в List и с помощью foreach я могу решить эту проблему. Но в сложном объекте и из-за большой базы данных требуется слишком много времени для выполнения.

ответ

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