我有一個產品和一個零件表。這是該協會:如何通過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);
}
}
你只需要過濾的產品與最終結果的部分。無論是在內存中還是在數據庫中執行此操作效率更高,都是值得您嘗試的。 –