使用 导航查询 进行分页查询时 如何使用排序 返回

db.Queryable<A>().Includes(e=>e.B) .Skip(0) .Take(10) .ToList()
是否可以根据B表的CreateTime字段进行排序后再分页
热忱回答(13)
-
fate sta VIP0
2024/6/5db.Queryable<A>()
.Includes(e=>e.B)
.IncludeLeftJoin(e=>e.B)
.Skip(0)
.Take(10)
.OrderBy(e=>e.B.CreateTime)
.ToList()
0 回复 -
孙波 VIP0
2024/6/5@fate sta:
IncludeLeftJoin 只能是一对一
如果我A表Includes的B表是一对多的关系该如何处理
0 回复 -
fate sta VIP0
2024/6/5.Includes(e=>e.B.OrderBy(x=>x.xxx).ToList())
0 回复 -
孙波 VIP0
2024/6/5@fate sta:这个仅仅是关联的B表的数据进行排序了吧 并不是根据B表中的某个字段排序后 再分页查询
我举一个例子,如何实现以下效果:
var blogs = context.Blogs .Include(b => b.Posts) .OrderByDescending(b => b.BlogId) // 按BlogId降序排序 .ThenByDescending(b => b.Posts.Max(p => p.PostId)) // 如果需要,可以按关联Post的PostId降序排序 .Select(b => new { Blog = b, LatestPost = b.Posts.OrderByDescending(p => p.PostId).FirstOrDefault() }) .ToList();
0 回复 -
fate sta VIP0
2024/6/5-
0 回复 -
fate sta VIP0
2024/6/5-
0 回复 -
fate sta VIP0
2024/6/5var
blogs = context.Blogs
.Include(b => b.Posts)
.Select(b =>
new
{
Blog = b,
LatestPost = b.Posts.OrderByDescending(p => p.PostId).FirstOrDefault()
})
.ToList()
.OrderByDescending(b => b.BlogId)
// 按BlogId降序排序
.ThenByDescending(b => b.Posts.Max(p => p.PostId))
// 如果需要,可以按关联Post的PostId降序排序
.ToList();
tolist之后在排序这样就行了
0 回复 -
孙波 VIP0
2024/6/5这个EF语句我只是举一个例子, 实际场景是需要分页的, 不能先ToList全部查出来后再进行排序,数据太多了, 之前用EF是可以使用b.Posts.Max的方式根据B表的字段进行排序
var
blogs = context.Blogs
.Include(b => b.Posts)
.OrderByDescending(b => b.BlogId)
// 按BlogId降序排序
.ThenByDescending(b => b.Posts.Max(p => p.PostId))
// 如果需要,可以按关联Post的PostId降序排序
.Select(b =>
new
{
Blog = b,
LatestPost = b.Posts.OrderByDescending(p => p.PostId).FirstOrDefault()
})
.Skip(0)
.Take(10)
.ToList();
0 回复 -
fate sta VIP0
2024/6/5.ThenByDescending(b => SqlFunc.Subquery. where..Select(s=>s.xx))
用子查询实现
0 回复 -
孙波 VIP0
2024/6/12子查询排序确实可以,
但是当我排序字段多的时候OrderByIF会写很多每个OrderByIF中的SqlFunc.Subqueryable的where条件都相同,
能否有更优雅的方式统一处理SqlFunc.Subqueryable的where条件
.OrderByIF(string.Equals(request.Sort, "UpdateTime"), (e, oc) => SqlFunc.Subqueryable<Posts>().Where(p =>...很多条件...).Select(oc => oc.UpdateTime), request.IsAsc ? OrderByType.Asc : OrderByType.Desc) .OrderByIF(string.Equals(request.Sort, "xxx"), (e, oc) => SqlFunc.Subqueryable<Posts>().Where(p =>...很多条件...).Select(oc => oc.xxx), request.IsAsc ? OrderByType.Asc : OrderByType.Desc) .OrderByIF(string.Equals(request.Sort, "yyy"), (e, oc) => SqlFunc.Subqueryable<Posts>().Where(p =>...很多条件...).Select(oc => oc.yyy), request.IsAsc ? OrderByType.Asc : OrderByType.Desc) ...
很多条件其实都是一样的
0 回复 -
fate sta VIP0
2024/6/12@孙波:暂时没有后面支持
0 回复 -
孙波 VIP0
2024/6/12好的 目前一切顺利
0 回复 -
孙波 VIP0
2024/7/4基本测试都通过了 可以关闭这个问题了。 感谢!
0 回复