如何使用LINQ将按日期排序取Top N分类的查询改写为无from流式写法
改写后的Fluent方法链实现(无from关键字)
return await _context.Products .OrderBy(x => x.DateCreated) .GroupBy(x => x.Category, x => x.Category) .OrderByDescending(g => g.Count()) .Select(g => g.Key) .Take(3) .Select(element => ((Categories)element).ToString()) .ToListAsync();
逻辑对应说明
上述代码和你原有的查询语法逻辑完全等价,每一步对应关系如下:
.OrderBy(x => x.DateCreated)对应原查询的orderby x.DateCreated.GroupBy(x => x.Category, x => x.Category)对应原查询的group x.Category by x.Category into g,第一个参数指定分组键,第二个参数指定分组内要存储的元素.OrderByDescending(g => g.Count())对应原查询分组后的orderby g.Count() descending.Select(g => g.Key)对应原查询的select g.Key
注意:原查询中先按DateCreated排序再分组的逻辑实际上是无效的,分组操作不会保留数据源的排序规则,如果你确实需要对分组内的元素排序,可以在GroupBy之后针对分组内的集合调用排序方法。
内容的提问来源于stack exchange,提问作者Anton Gridushko
相关产品推荐
相关产品推荐

