无法隐式转换类型'System.Collections.Generic.IEnumerable Cast错误

时间:2016-10-14 07:06:35

标签: c# linq list collections

我有以下模型类。我想根据某些条件从AddressMatch列表中检索AddressMatches的对象。

public class AddressMatchList
{
    public List<AddressMatch> AddressMatches { get; set; }
}

public class AddressMatch
{
    public string HouseRange { get; set; }
    public string HouseNumber { get; set; }
    public string StreetName { get; set; }
    public string AddressIdentifier { get; set; } 
}

我试过了:

AddressMatch selectedMatchedAddress = new AddressMatch();   
selectedMatchedAddress = addressMatches.AddressMatches.Where(a => a.AddressIdentifier == "cpr");

但得到了错误:

  

无法隐式转换类型   'System.Collections.Generic.IEnumerable'到   'AddressMatch'。存在显式转换(你错过了吗?   投?)

3 个答案:

答案 0 :(得分:7)

Where会返回一个可枚举的(列表)项目,您希望只有一个项目。

如果您想确保只有一个匹配项,则可以使用此选项(如果找到多个匹配项,SingleOrDefault会发出异常):

selectedMatchedAddress = addressMatches.AddressMatches
                         .SingleOrDefault(a => a.AddressIdentifier == "cpr");

如果你只是想要第一个匹配的项目,那就这样:

selectedMatchedAddress = addressMatches.AddressMatches
                         .FirstOrDefault(a => a.AddressIdentifier == "cpr");

在这两种情况下,检查selectedMatchedAddress的{​​{1}}非常重要。

答案 1 :(得分:3)

那是因为在LINQ表达式中

.Where(a => a.AddressIdentifier == "cpr")

无法知道它的结果是多个项目的一个项目,结果是Enumerable<T>

您可以使用FirstOfDefault()来确保表达式只返回AddressMatch的项目。

.Where(a => a.AddressIdentifier == "cpr").FirstOfDefault();

答案 2 :(得分:0)

List<AddressMatch> a1 = addressMatches.AddressMatches
                        .Where(a => a.AddressIdentifier == "cpr")
                        .ToList<AddressMatch>();

Where会返回IEnumerable项,与List<AddressMatch>不兼容。最后的ToList<AddressMatch>()方法从Where创建的IEnumerable创建兼容列表。