我正在嘗試進行嵌套組加入(類別>子類別>專案)。并通過我的控制器將所有這些資料作為彼此下方的資料串列回傳,例如:
[
{
"name":"cat1",
"subcategories":[
{
"name":"subcat1",
"items":[
{
"name":"item1"
}
]
}
]
}
]
但是,我嘗試撰寫的查詢無法轉換為 SQL。它一直說由于客戶評估問題,它不能被翻譯成 SQL。我已經檢查了有關客戶評估的檔案,但我似乎找不到任何合理的原因來解釋為什么這種情況仍在發生。據說是因為代碼不能轉換成 SQL 并且必須在客戶端本身上執行,需要顯式配置,我想盡可能避免這種情況,并立即在服務器上執行整個查詢。
甚至可能以我嘗試運行它的方式(嵌套 2 個 GroupJoins),還是我需要切換到另一種方式?
var categories = Db.WorkListCategories
.Where(w => w.CompanyId == null || w.CompanyId.Value == companyId);
var subCategories = Db.WorkListSubCategories
.Where(w => w.Category!.CompanyId == null || w.Category!.CompanyId.Value == companyId);
var workLists = Db.WorkLists
.Where(w => w.SubCategory!.Category!.CompanyId == null || w.SubCategory.Category.CompanyId.Value == companyId);
return await categories
.GroupJoin(subCategories, o => o.Id, i => i.CategoryId, (category, subCats) => new WorkListCategoryFull<WorkListSubCategoryFull>
{
Id = category.Id,
Name = category.Name,
IsEditable = category.IsEditable,
SubCategories = subCats
.GroupJoin(workLists, o => o.Id, i => i.SubCategoryId, (subCategory, workLists) => new WorkListSubCategoryFull
{
Id = subCategory.Id,
Name = subCategory.Name,
WorkLists = workLists
.Select(s1 => new WorkList
{
Id = s1.Id,
Name = s1.Name
})
.ToList()
})
.ToList()
})
.ToListAsync(cancellationToken);
為了更好的可視化,我將模式添加為下圖:

uj5u.com熱心網友回復:
GroupJoin在 EF Core 中受支持較少的運算子。僅用于 LEFT JOIN。您的查詢可以用更簡單的方式重寫:
...
return await categories
.Select(category => new WorkListCategoryFull<WorkListSubCategoryFull>
{
Id = category.Id,
Name = category.Name,
IsEditable = category.IsEditable,
SubCategories = subCategories
.Where(subCategory => subCategory.CategoryId == category.Id)
.Select(subCategory => new WorkListSubCategoryFull
{
Id = subCategory.Id,
Name = subCategory.Name,
WorkLists = workLists
.Where(wl => subCategory.Id == wl.SubCategoryId)
.Select(wl => new WorkList
{
Id = wl.Id,
Name = wl.Name
})
.ToList()
})
.ToList()
})
.ToListAsync(cancellationToken);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/494223.html
上一篇:物體框架。按子陣列元素的數量排序
