我有几个表,其中有一对多的关系。假设我有一个国家表格,一个FK到国家的州表格和一个FK到州表格的城市表格。LINQ到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();
}
显然,这不工作 - 有没有办法做到这一点?
更新:
我可以遍历直通对象:
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 ...
}
,但似乎并不很优雅。
更新:@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 2010-04-20 13:04:58
如果一个国家拥有一个国家集合,然后相互对立,那么该国就有一个它所隶属的国家。各州和城市也是如此。所以,这意味着从一个城市,你可以到达国家,然后到达国家。当然,这是假设您正在使用实体框架,并且您正在使用实体关系(从数据库中的外键或从模型查看器手动构建)。如果您手动或从其他模型提供者构建了国家/州/城市对象,则该关系将取决于您需要向我们提供的那些模型。 – ADB 2010-04-20 13:35:24
使用EF和asp.net MVC 1.0。模型包含IEnemurable,并且有关系。解决方案的问题在于国家没有城市导航属性 - 只是国家的集合。 –
chris
2010-04-20 13:52:35