此查询将返回类别列表(及其包含的产品,但产品与此问题无关)。 ParentId == null
的类别将按SortOrder
排序,但Children
类别则不会。据我了解,这不可能直接使用LINQ实现,但可以通过编程方式“post query”完成。
如何?
查询:
List<ProductCategory> DbCategories = _context.ProductCategories
.Include(e => e.Children)
.Include(e => e.ProductInCategory)
.ThenInclude(p => p.Product)
.ToList().OrderBy(o => o.SortOrder)
.Where(e => e.ParentId == null).ToList();
结果以无序列表递归显示,如下所示:
<ul>
<li>
Id=1,SortOrder=1,ParentId=null (sorted)
</li>
<li>
Id=2,SortOrder=2,ParentId=null (sorted)
</li>
<li>
Id=3,SortOrder=3,ParentId=null (sorted)
<ul>
<li>
Id=4,SortOrder=2,ParentId=3 (not sorted)
</li>
<li>
Id=5,SortOrder=3,ParentId=3 (not sorted)
</li>
<li>
Id=6,SortOrder=1,ParentId=3 (not sorted)
<ul>
<li>
<!-- ... and so on... nothing gets sorted further on either. -->
</li>
</ul>
</li>
</ul>
</li>
</ul>
答案 0 :(得分:1)
您可以遍历子列表(在初始查询之后)对每个列表进行排序:
DbCategories.ForEach(cat => cat.Children = cat.Children.OrderBy(c => c.SortOrder).ToList());
编辑:这是其他实体的附加示例行:
DbCategories.ForEach(prod =>
{
prod.ProductInCategory = prod.ProductInCategory.OrderBy(p => p.SortOrder).ToList();
prod.ProductInCategory.ForEach(pr => pr.Product = pr.Product.OrderBy(p => p.SortOrder).ToList());
});
答案 1 :(得分:0)
试试吧。
{{1}}