Linq ef6滤波

Linq ef6滤波,linq,entity-framework,Linq,Entity Framework,我有一个返回IEnumerable材质的方法 public IEnumerable<Materials> ListMyMaterials(int organization) 我收到的两个错误是: 1) 无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“bool” 2) 无法将lambda表达式转换为委托类型“System.Func”,因为块中的某些返回类型不能隐式转换为委托返回类型 如果该属性在材质上,我不会有任何问题,但我只

我有一个返回IEnumerable材质的方法

  public IEnumerable<Materials> ListMyMaterials(int organization)
我收到的两个错误是:

1) 无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“bool”
2) 无法将lambda表达式转换为委托类型“System.Func”,因为块中的某些返回类型不能隐式转换为委托返回类型

如果该属性在材质上,我不会有任何问题,但我只希望在该组织拥有的产品中找到材质


使用相关对象中的属性过滤返回数据集的正确方法是什么?

不必在上述Lambda表达式中执行复杂的
Include
,您可以编写一个简单的LINQ查询,结果如下:

(from mat in db.Materials
         join org in db.Organization on mat.OrganizationID equals org.ID
         where mat.OrganazationID=organization
         select new Material{
         ID=mat.ID,
         OrganizationID=mat.OrganizationID
         })
我没有表模式的任何信息,这就是为什么在我上面的LINQ查询中,我通过将
OrganizationID
作为连接键来进行连接


在这里,您的返回类型将是
IQueryable

,这是因为此表达式:

.Where(o => o.ProductMaterial.Select(p => p.Product.Organization.ID == organization))

不计算为真或假。该select语句是一个子查询,而不是布尔条件

您是否尝试使用
Contains
而不是
select
?它应该返回一个布尔值。Contains没有清除第一个错误。谢谢但是,我仍然不确定如何处理#2。此查询的返回类型是什么?我想把它作为可询问的东西退回。
.Where(o => o.ProductMaterial.Select(p => p.Product.Organization.ID == organization))