2012-04-20 18 views
1

裏面我有這樣的LINQ查詢演員對類型的LINQ到實體查詢

var Cities= (from city in AllCities 
    where (city.NumberOfCitizens > 1000) 
    select new 
    { 
     Mayor= (from mayor in AllMayors where mayor.CityKey == city.Key select mayor), 
     Name = city.Name, 
     Country = city.Country, 
     Key = city.Key 
     }).ToList(); 

我從我> 1000市民的城市選擇市長的名字,國家和關鍵。

Mayor是一類有2個屬性String FirstNameString LastName

現在,我想這樣做,提取市長FirstNameLastName在城市的Cities另一個查詢(這是第一個查詢的結果)具有鍵> 20

var Result= (from city in Cities 
    where (city.Key> 20) 
    select new 
    { 
     MayorFirstName = city.Mayor.FirstName, 
     MayorLastName = city.Mayor.LastName, 
     City = city.Name 
     }).ToList(); 

的問題是,我得到一個編譯錯誤city.Mayor不包含FirstName定義和LastName

我試圖將它轉換爲市長類型的查詢中:

Mayor= (Mayor)(from mayor in AllMayors where mayor.CityKey == city.Key select mayor), 
....... 

的應用程序構建和正常啓動,但我得到我不能轉換爲類型LINQ查詢中運行時錯誤。

我該如何解決這個問題?有沒有辦法在查詢內部投射或有其他解決方案。

非常感謝您的幫助

回答

3

查詢的這部分的結果是不是一個單一的Mayor對象,但IEnumerable<Mayor>

Mayor = (from mayor in AllMayors where mayor.CityKey == city.Key select mayor) 

改變這一行到:

Mayor= (from mayor in AllMayors where mayor.CityKey == city.Key select mayor).FirstOrDefault() 

然後市長財產將是一個單一的Mayor實例。

注意,使用FirstOrDefault將返回如果沒有市長被發現,而First()將拋出一個異常沒有市長被發現。這些選擇取決於你的情況。

2

而不是分配一個IEnumerable<Mayor>市長,你要選擇一個項目。使用Enumerable.First()與謂詞來做到這一點:

Mayor = AllMayors.FirstOrDefault(mayor => mayor.CityKey == city.Key) 

一個在你的榜樣:

var Cities= (from city in AllCities 
      where (city.NumberOfCitizens > 1000) 
      select new 
      { 
       Mayor= AllMayors.FirstOrDefault(mayor => mayor.CityKey == city.Key), 
       Name = city.Name, 
       Country = city.Country, 
       Key = city.Key 
      }).ToList(); 
+1

它需要是FirstOrDefault與EntityFramework – Aducci 2012-04-20 15:23:06

+0

@aducci:謝謝!更新的代碼 – Stefan 2012-04-20 15:25:12