zoukankan      html  css  js  c++  java
  • Linq排序方式与Lambda排序方式比较以及OrderBy、ThenBy的使用

    沿用之前某一篇文章的实体类与EF操作类代码。数据库中增加几条数据

     

    Linq 的排序方式,下面例子是根据RoleId 升序,Name降序

     

    EFContext<Member> efMemberContext = new EFContext<Member>();
    var memberSet = efMemberContext.Set<Member>().Include("Role");
    var memberList = from m in memberSet
                     orderby m.RoleId ascending, m.Name descending
                     select m;
    
    foreach (Member item in memberList)
    {
        Console.WriteLine("{0},Role:{1}",item.Name,item.Role.Name);
    }

    输出结果如下:

    SQL Profiler如下:

     

     同样的方式如果用Lambda排序,先猜想如下,

    EFContext<Member> efMemberContext = new EFContext<Member>();
    var memberSet = efMemberContext.Set<Member>().Include("Role");
    var memberList = memberSet.OrderBy(m => m.RoleId).OrderByDescending(m => m.Name);
    foreach (Member item in memberList)
    {
        Console.WriteLine("{0},Role:{1}",item.Name,item.Role.Name);
    }

    运行程序发现与linq方式的不一致,

    SQL Profile如下:

    发现连续调用OrderBy或者OrderByDescending之后,以最后一个为准排序,这时ThenBy就派上了用场。

    ThenBy是使用OrderBy或者OrderByDescending之后,再次对结果进行二次排序

    EFContext<Member> efMemberContext = new EFContext<Member>();
    var memberSet = efMemberContext.Set<Member>().Include("Role");
    var memberList = memberSet.OrderBy(m => m.RoleId).ThenByDescending(m => m.Name);
    foreach (Member item in memberList)
    {
        Console.WriteLine("{0},Role:{1}",item.Name,item.Role.Name);
    }

    如果想数据库中多个列排序一致,可以先OrderBy(或者OrderByDescending)后ThenBy(或者ThenByDescending),也可以在OrderBy或者OrderByDescending直接指定多个属性,这样生成的SQL就是多个列的排序(排序一致asc/desc)

    EFContext<Member> efMemberContext = new EFContext<Member>();
    var memberSet = efMemberContext.Set<Member>().Include("Role");
    var memberList = memberSet.OrderBy(m => new { m.RoleId, m.Name });
    foreach (Member item in memberList)
    {
        Console.WriteLine("{0},Role:{1}",item.Name,item.Role.Name);
    }

     

     

     

  • 相关阅读:
    .NetCore 3.1和.NetCore 5.0 中WebApi的请求参数的验证方法
    php 使脚本持续的运行
    Elasticsearch es三种分页方式和对比
    es 大批量写入提高性能的策略
    php 使用多进程批量插入数据
    【转】EM算法MATLAB代码及详细注解
    【转】详解EM算法与混合高斯模型(Gaussian mixture model, GMM)
    【转】高斯混合模型
    【转】二维高斯分布(Two-dimensional Gaussian distribution)的参数分析
    word使用dot模板以spring word 模板为例
  • 原文地址:https://www.cnblogs.com/godbell/p/7349782.html
Copyright © 2011-2022 走看看