查询,简单的LINQ声明

问题描述:

我有数据缓存查询,简单的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

尝试用这种拉姆达查询语法

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

那是一个编译错误。您分配给cityName的类型是IEnumerable,并且您将其声明为字符串。

尝试以下操作:

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