我有幾個表,其中有一對多的關係。假設我有一個國家表格,一個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