无法将类型System.Collections.Generic.List <ienumerable>隐式转换为<ienumerable

时间:2016-06-09 14:41:37

标签: c# asp.net-mvc entity-framework linq

=“”

我有两个类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;。一个明确的   转换存在。

1 个答案:

答案 0 :(得分:5)

您需要使用SelectMany()方法而不是Select()

您在此处使用Select()创建了一个包含所有Employees Collections的新Enumerable。

SelectMany让所有“孩子”变平。收集并将每个员工聚合成一个Enumerable。

对于评论中描述的第二个问题,似乎Employees在表架构中或作为导航属性未知。

一个修复方法是在ToList()调用之前调用SelectMany()以确保执行SQL查询,并在内存中执行其余操作。

这是基于此SO Post