我有以下模型类。我想根据某些条件从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'。存在显式转换(你错过了吗? 投?)
答案 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创建兼容列表。