查询,简单的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都是字符串。
答
尝试用这种拉姆达查询语法
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();
那么想必'city.Name'被声明为IEnumerable的''。没有一个完整的例子很难说。 (顺便说一句,你为什么要在循环外声明'cityName'?我假设你实际上在循环中做了一些有用的工作?) –
2015-04-05 12:43:27
现在cityName被声明为它应该(在linq语句之外被错误留下)。 c.Name是字符串。问题依旧。我迭代通过someData来生成viewmodels列表以进一步使用它。我在linq语句中选择关键字时出错。 – user1765862 2015-04-05 12:49:14
这甚至不应该编译,因为您试图在示例中为IEnumerable分配一个字符串。你能提供实际(编译)代码的一部分吗? –
2015-04-05 12:53:34