У меня есть пара таблиц, в которых есть одно-много отношений. Предположим, у меня есть таблица «Страна», таблица «Штат» с FK для страны и стол «Город» с FK для штата.LINQ to Entites: Выполнение счета по отношениям один-ко-многим
Я хотел бы быть в состоянии создать подсчет всех городов для данной страны, а также количество городов, основанных на фильтре - что-то вроде:
foreach(var country in Model.Country) {
total = country.State.All().City.All().Count() ;
filtered = country.State.All().City.Any(c=>c.field == value).Count();
}
Очевидно, что это не работа - есть ли способ сделать это?
Update:
Я итерацию через объекты:
foreach (var item in Model) {
... other stuff in here ...
int tot = 0;
int filtered = 0;
foreach (var state in item.State)
{
foreach (var city in state.City)
{
tot++;
if (city.Field == somevalue)
filtered ++;
}
}
... other stuff in here ...
}
, но это не кажется очень элегантно.
Update: @AD есть несколько предложений, но то, что работает, чтобы решить эту проблему было:
int tot = item.States.Sum(s=>s.City.Count);
int filtered = item.States.Sum(s=>s.City.Where(c=>c.Field == somevalue).Count());
Проблема в том, что linq для объектов не работает таким образом. Моя модель представляет собой сборник стран, а страна не имеет собственности города - у нее есть коллекция государств, и у каждого штата есть коллекция Сити. – chris
Если в стране имеется свод государств, то в ответ на это государство имеет единую страну, к которой она присоединена. То же самое касается государств и городов. Таким образом, это означает, что из города вы можете добраться до государства, а затем до страны. Конечно, предполагается, что вы работаете с Entity Framework, и вы используете отношения Entities (построенные либо из внешних ключей в БД, либо вручную из Model Viewer). Если вы создали объект Country/State/City вручную или у другого поставщика модели, тогда зависимость будет зависеть от тех моделей, которые вам необходимо предоставить. – ADB
Использование EF и asp.net MVC 1.0. Модель содержит IEnemurable, и отношения есть. Проблема с вашим решением заключается в том, что у страны нет собственности на навигацию по городу - просто коллекция государств. –
chris