无法在实体框架中将IEnumerable <int>转换为List <t>

时间:2017-05-20 10:28:32

标签: c# linq entity-framework-4

我有这样的查询

IEnumerable<int> companies = Employers
                             .Where(p => p.Id == User.ID
                             .SelectMany(p => p.companies)
                             .Select(p => p.Id);


return Employers
       .Where(p => companies.Contains(p.Companies)
       .Include(p => p.FirstName)
       .ToList();      

此处p.Companies指的是

Public Virtual List<Company>

在班级Employers下。

发生此错误:

  

'IEnumerable'不包含'Contains'的定义和最佳扩展方法重载'Queryable.Contains&gt;(IQueryable&gt;,List)'需要'IQueryable&gt;'类型的接收器

1 个答案:

答案 0 :(得分:1)

这样做:

Where(p => companies.Contains(p.Companies)

您尝试检查companies(先前查询中的IEnumerable<int>)是否包含某些公司(对象),而不是int值。

您无法检查int值的集合是否包含某些不是int的值(Company是某个对象)。

如果您要查询Id变量中companies公司的所有雇主,请使用此Linq个查询:

return Employers
       .Where(p => p.Companies.Any(c => companies.Contains(c.Id)))
       .Include(p => p.FirstName)
       .ToList();     
相关问题