使用 EF 6 进行过滤
Filtering With EF 6
我有一个方法是 returning IEnumerable of Materials
public IEnumerable<Materials> ListMyMaterials(int organization)
我想在控制器中将其过滤为仅 return 在由传入的组织 ID 制造的产品中找到的材料。
这是我的查询:
return db.Materials.
Include("Organization").
Include("ProductMaterial.Product.Organization").
.Where(o => o.ProductMaterial.Select(p => p.Product.Organization.ID == organization)).AsQueryable();
我收到的两个错误是:
1) 无法将类型 'System.Collections.Generic.IEnumerable' 隐式转换为 'bool'
2) 无法将 lambda 表达式转换为委托类型 'System.Func<{}.Models.Materials,int,bool>',因为块中的某些 return 类型不能隐式转换为委托 return 类型
如果 属性 已经在材料上,我没有任何问题像这样过滤,但我只想要在组织拥有的产品中找到的材料。
使用在相关对象中找到的 属性 过滤 returned 数据集的正确方法是什么?
您可以编写一个简单的 LINQ 查询,而不是在上面的 Lambda 表达式中执行复杂的 Include
,结果为::
(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
})
我没有 table 模式的任何信息,这就是为什么在我上面的 LINQ 查询中我通过将 OrganizationID
视为连接键来完成连接。
此处您的 return 类型将是 IQueryable<Material>
是因为这个表达式:
.Where(o => o.ProductMaterial.Select(p => p.Product.Organization.ID == organization))
不评估为真或假。 select 语句是子查询而不是布尔条件
我有一个方法是 returning IEnumerable of Materials
public IEnumerable<Materials> ListMyMaterials(int organization)
我想在控制器中将其过滤为仅 return 在由传入的组织 ID 制造的产品中找到的材料。
这是我的查询:
return db.Materials.
Include("Organization").
Include("ProductMaterial.Product.Organization").
.Where(o => o.ProductMaterial.Select(p => p.Product.Organization.ID == organization)).AsQueryable();
我收到的两个错误是:
1) 无法将类型 'System.Collections.Generic.IEnumerable' 隐式转换为 'bool'
2) 无法将 lambda 表达式转换为委托类型 'System.Func<{}.Models.Materials,int,bool>',因为块中的某些 return 类型不能隐式转换为委托 return 类型
如果 属性 已经在材料上,我没有任何问题像这样过滤,但我只想要在组织拥有的产品中找到的材料。
使用在相关对象中找到的 属性 过滤 returned 数据集的正确方法是什么?
您可以编写一个简单的 LINQ 查询,而不是在上面的 Lambda 表达式中执行复杂的 Include
,结果为::
(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
})
我没有 table 模式的任何信息,这就是为什么在我上面的 LINQ 查询中我通过将 OrganizationID
视为连接键来完成连接。
此处您的 return 类型将是 IQueryable<Material>
是因为这个表达式:
.Where(o => o.ProductMaterial.Select(p => p.Product.Organization.ID == organization))
不评估为真或假。 select 语句是子查询而不是布尔条件