2015-04-05 42 views
0

我有數據緩存查詢,簡單的LINQ聲明

private static List<City> CachedCities 
{ 
    get { ... } 
} 
從緩存列表

現在的名單我想提取使用LINQ

private someOtherMethod() 
{  
    foreach (var item in someData) { 
    string cityName = from c in CachedCities where c.Id == item.Address.CityId select c.Name; 
    ... 
    } 
} 

我對LINQ收到錯誤以下聲明

錯誤1無法隱式轉換類型

'System.Collections.Generic.IEnumerable<string>''string'。有 顯式轉換存在(您是否缺少演員?)

p.s. c.Id和Address.CityId都是字符串。

+0

那麼想必'city.Name'被聲明爲IEnumerable的''。沒有一個完整的例子很難說。 (順便說一句,你爲什麼要在循環外聲明'cityName'?我假設你實際上在循環中做了一些有用的工作?) – 2015-04-05 12:43:27

+0

現在cityName被聲明爲它應該(在linq語句之外被錯誤留下)。 c.Name是字符串。問題依舊。我迭代通過someData來生成viewmodels列表以進一步使用它。我在linq語句中選擇關鍵字時出錯。 – user1765862 2015-04-05 12:49:14

+0

這甚至不應該編譯,因爲您試圖在示例中爲IEnumerable 分配一個字符串。你能提供實際(編譯)代碼的一部分嗎? – 2015-04-05 12:53:34

回答

3

嘗試用這種拉姆達查詢語法

string cityName = CachedCities.Where(x => x.Id == item.Address.CityId) 
        .Select(a => a.Name) 
        .FirstOrDefault(); 
0

那是一個編譯錯誤。您分配給cityName的類型是IEnumerable,並且您將其聲明爲字符串。

嘗試以下操作:

string cityName = CachedCities.Where(c => c.Id == item.Address.CityId).Select(x => x.Name).FirstOrDefault();