我有以下类,我想返回特定状态的所有USLocation类:
var usLocations = (from s in GetUSStates() where s.Code == stateCode select s.Locations);
但我一直收到错误:
无法隐式转换类型 'System.Collections.Generic.IEnumerable< System.Collections.Generic.IEnumerable< A.Model.USLocation>>' 到'System.Collections.Generic.List< A.Model.USLocation>'。一个明确的 存在转换(你错过了演员吗?)
似乎“选择s.Locations正在回收集合中的集合。我在这里做错了什么?
public class USState
{
public int Id { get; set; }
public string Name { get; set; }
public string Code { get; set; }
public IEnumerable<USLocation> Locations { get; set; }
public override string ToString()
{
return string.Format("{0}:{1} ({2})", Name, Code, Id);
}
}
public class USLocation
{
public int Id { get; set; }
public string Name { get; set; }
}
答案 0 :(得分:7)
您是select
集合而不是单个项目。这就是usLocation
为IEnumerable
的{{1}}的原因。尝试使用IEnumerable
和(可选)SelectMany
:
ToList
您将获得var usLocations = GetUSStates().Where(s => s.Code == stateCode).SelectMany(s => s.Locations).ToList();
的列表。
答案 1 :(得分:1)
您需要使用SelectMany代替Select。
答案 2 :(得分:0)
var usLocations = GetUSStates()
.Where(state => state.Code == stateCode).Single().Locations;
或
var usLocations = (from s in GetUSStates()
where s.Code == stateCode
from l in s.Locations
select l);
答案 3 :(得分:0)
var usLocations = GetUSStates().Where(s => s.Code == stateCode).First().Locations;
编辑:您的查询返回一个枚举,其中包含一个州的结果,本身就是位置的枚举。