我正在尝试使用 EF Core 来获取嵌套类别。问题是它太慢了。
看我的代码:
public async Task<List<Category>> GetNestedCategoryAsync(Category category)
{
if (category is null)
return new List<Category>();
IQueryable<Category> query = db.Categories.Include(x => x.Childs).Include(x => x.Products).Where(x => category.Childs.Contains(x)).AsNoTracking();
List<Category> nestedCategories = await query.ToListAsync();
foreach (Category nestedCategory in nestedCategories.ToArray())
nestedCategories.AddRange(await GetNestedCategoryAsync(nestedCategory));
return nestedCategories;
}
其实我不知道如何将这个 SQL 翻译成 EF .. 甚至可能吗?它的速度快了一千倍
With Categories_CTE As
(
Select *
From Categories
Where Id = 8692
Union All
Select t.*
From Categories t
Inner Join Categories_CTE c On c.Id = t.ParentId
)
Select c.*
From Categories_CTE c;
感谢您的任何提示
最佳答案
Entity Framework 永远不会生成 CTE,这对它来说太过分了。但是,您可以像这样通过 EF Core 使用您的 SQL:
var categories = db.Categories.FromSql("WITH Categories_CTE AS .......");
关于performance - EF 核心 : How to translate "With table AS",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49136487/