我有一个产品和一个零件表。这是该协会:如何通过Linq在一对多关系上筛选查询
Create Table Product
{
Id int,
Name nvarchar(max)
}
Create Table Part
{
Id int,
Name nvarchar (max),
ProductID int (foreign key to Product.Id),
SomeCategoryId int
}
现在,我想回到产品的列表,零部件只包括200
规则,SomeCategoryId的列表:
- 如果一个Part.SomeCategoryId <> 200,不包括零件
- 如果没有Part.SomeCategoryId == 200对应于产品通过Part.Product.Id,删除整个产品。
如何让我的代码更高效?
prods = db.Products.OrderBy(o => o.Name).Select(pr => new ProductViewModel
{
Id = pr.Id,
Name = pr.Name,
Parts = pr.Parts.OrderBy(o => o.Name).Select(prt => new PartViewModel
{
Id = prt.Id,
Name = prt.Name,
SomeCategoryId = prt.SomeCategoryId
}).Where(w => w.SomeCategoryId == 200).ToList()
}).ToList();
foreach(var prod in prods)
{
var isSomeCategory = false;
foreach (var part in prod.Parts)
{
if (part.SomeCategoryId == 200)
{
isSomeCategory = !isSomeCategory;
}
}
if (isSomeCategory == false)
{
prods.Remove(prod);
}
}
你只需要过滤的产品与最终结果的部分。无论是在内存中还是在数据库中执行此操作效率更高,都是值得您尝试的。 –