我有一个返回IEnumerable of Materials的方法
public IEnumerable<Materials> ListMyMaterials(int organization)
我想在控制器中对其进行过滤,以仅返回在传入的组织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&#39;到了布尔&#39;
2)无法将lambda表达式转换为委托类型&#39; System.Func&lt; {}。Models.Materials,int,bool&gt;&#39;因为块中的某些返回类型不能隐式转换为委托返回类型
如果属性已经在材料上,我没有任何过滤这样的问题,但我只想要在组织拥有的产品中找到的材料。
使用相关对象中的属性过滤返回数据集的正确方法是什么?
答案 0 :(得分:0)
不是在上面的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<Material>
答案 1 :(得分:0)
这是因为这个表达式:
.Where(o => o.ProductMaterial.Select(p => p.Product.Organization.ID == organization))
不评估为真或假。 select语句是子查询而不是布尔条件