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

SqlSugar 沟通中
12 189
该叫什么 孙波 发布于1周前
悬赏:0 飞吻
db.Queryable<A>().Includes(e=>e.B)
.Skip(0)
.Take(10)
.ToList()

是否可以根据B表的CreateTime字段进行排序后再分页

热忱回答12

  • db.Queryable<A>()

    .Includes(e=>e.B)

    .IncludeLeftJoin(e=>e.B)

    .Skip(0)

    .Take(10)

    .OrderBy(e=>e.B.CreateTime)

    .ToList()


    0 回复
  • @fate sta

     IncludeLeftJoin 只能是一对一

    如果我A表Includes的B表是一对多的关系该如何处理

    0 回复
  • .Includes(e=>e.B.OrderBy(x=>x.xxx).ToList())

    0 回复
  • @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 回复
  • -

    0 回复
  • -

    0 回复
  • var 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 回复
  • 这个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 回复
  • .ThenByDescending(b => SqlFunc.Subquery. where..Select(s=>s.xx))


    用子查询实现

    0 回复
  • 子查询排序确实可以, 
    但是当我排序字段多的时候

    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 回复
  • @孙波:暂时没有后面支持

    0 回复
  • 好的 目前一切顺利

    0 回复