我有两个类Employee和Territory:
public class Territory
{
public string TerritoryID { get; set; }
public string TerritoryDescription { get; set; }
public IEnumerable<Employee> Employees { get; set; }
}
我正在尝试使用LINQ通过TerritoryID拉取Employees并获得异常:
IEnumerable<Employee> empList = context.Territories
.Where(x => x.TerritoryID == territoryID)
.Select(y => y.Employees)
.ToList();
例外是:
无法隐式转换类型System.Collections.Generic.List&lt; System.Collections.Generic.IEnumerable&lt; Employee&gt;&gt; to System.Collections.Generic.IEnumerable&lt; Employee&gt;。一个明确的 转换存在。
答案 0 :(得分:5)
您需要使用SelectMany()
方法而不是Select()
您在此处使用Select()
创建了一个包含所有Employees Collections的新Enumerable。
SelectMany
让所有“孩子”变平。收集并将每个员工聚合成一个Enumerable。
对于评论中描述的第二个问题,似乎Employees
在表架构中或作为导航属性未知。
一个修复方法是在ToList()
调用之前调用SelectMany()
以确保执行SQL查询,并在内存中执行其余操作。
这是基于此SO Post