LINQ to SQL语句(5)之Order By

Order By操作

适用场景:对查询出的语句进行排序,比如按时间排序 等等。

说明:按指定表达式对集合排序;延迟,:按指定表达式对集合 排序;延迟,默认是升序,加上descending表示降序,对应的扩展方法是 OrderBy和OrderByDescending

1.简单形式

这个例子使用 orderby 按雇用日期对雇员进行排序:

var q =

  from e in db.Employees

  orderby e.HireDate

  select e;

说明:默认为升序

2.带条件形式

注意:Where 和Order By的顺序并不重要。而在T-SQL中,Where和Order By有严格的位置限制 。

var q =

  from o in db.Orders

  where o.ShipCity == "London"

  orderby o.Freight

   select o;

语句描述:使用where和orderby按运费进行排序。

3.降序排序

var q =

  from p in db.Products

  orderby p.UnitPrice descending

  select p;

4.ThenBy

语句描述:使用复合的 orderby 对客户进行 排序,进行排序:

var q =

  from c in db.Customers

  orderby c.City, c.ContactName

  select c;

说明:按多个表达式进行排序,例如先按City排序,当City相 同时,按ContactName排序。这一句用Lambda表达式像这样写:

var q =

  .OrderBy(c => c.City)

   .ThenBy(c => c.ContactName).ToList();

在T-SQL中没有 ThenBy语句,其依然翻译为OrderBy,所以也可以用下面语句来表达:

var q =

  db.Customers

  .OrderBy(c => c.ContactName)

  .OrderBy(c => c.City).ToList ();

所要注意的是,多个OrderBy操作时,级连方式是按逆序。对 于降序的,用相应的降序操作符替换即可。

var q =

   db.Customers

  .OrderByDescending(c => c.City)

   .ThenByDescending(c => c.ContactName).ToList();

需要 说明的是,OrderBy操作,不支持按type排序,也不支持匿名类。比如

var q =

  db.Customers

  .OrderBy(c => new

  {

    c.City,

    c.ContactName

   }).ToList();

会被抛出异常。错误是前面的操作有匿名类,再 跟OrderBy时,比较的是类别。比如

var q =

   db.Customers

  .Select(c => new

  {

     c.City,

    c.Address

  })

  .OrderBy(c => c).ToList();

如果你想使用OrderBy(c => c),其前提条件是 ,前面步骤中,所产生的对象的类别必须为C#语言的基本类型。比如下句,这里 City为string类型。

var q =

  db.Customers

   .Select(c => c.City)

  .OrderBy(c => c).ToList ();

5.ThenByDescending

这两个扩展方式都是用在 OrderBy/OrderByDescending之后的,第一个ThenBy/ThenByDescending扩展方法 作为第二位排序依据,第二个ThenBy/ThenByDescending则作为第三位排序依据 ,以此类推

var q =

  from o in db.Orders

   where o.EmployeeID == 1

  orderby o.ShipCountry, o.Freight descending

  select o;

语句描述:使用orderby先按发 往国家再按运费从高到低的顺序对 EmployeeID 1 的订单进行排序。

6. 带GroupBy形式

var q =

  from p in db.Products

   group p by p.CategoryID into g

  orderby g.Key

  select new {

    g.Key,

    MostExpensiveProducts =

       from p2 in g

      where p2.UnitPrice == g.Max(p3 => p3.UnitPrice)

      select p2

   };

语句描述:使用orderby、Max 和 Group By 得出每种类别 中单价最高的产品,并按 CategoryID 对这组产品进行排序。

LINQ to SQL语句(5)之Order By,布布扣,bubuko.com

时间: 2025-01-03 18:59:02

LINQ to SQL语句(5)之Order By的相关文章

LINQ to SQL语句Concat/Union/Intersect/Except--2017年2月22日

Concat/Union/Intersect/Except操作 适用场景:对两个集合的处理,例如追加.合并.取相同项.相交项等等. Concat(连接) 说明:连接不同的集合,不会自动过滤相同项:延迟. 1.简单形式: var q = ( from c in db.Customers select c.Phone ).Concat( from c in db.Customers select c.Fax ).Concat( from e in db.Employees select e.Home

LINQ to SQL语句(1)之Where(抄的好)

Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句. Where操作包括3种形式,分别为简单形式.关系条件形式.First()形式.下面分别用实例举例下: 1.简单形式: 例如:使用where筛选在伦敦的客户 var q = from c in db.Customers where c.City == "London" select c; 再如:筛选1994 年或之后雇用的雇员:

LINQ to SQL语句非常详细(原文来自于网络)

LINQ to SQL语句(1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句. Where操作包括3种形式,分别为简单形式.关系条件形式.First()形式.下面分别用实例举例下: 1.简单形式: 例如:使用where筛选在伦敦的客户 var q = from c in db.Customers where c.City == "London" select c

LINQ体验(9)——LINQ to SQL语句之Insert/Update/Delete操作

我们继续讲解LINQ to SQL语句,这篇我们来讨论Insert/Update/Delete操作.这个在我们的程序中最为常用了.我们直接看例子. Insert/Update/Delete操作 插入(Insert) 1.简单形式 说明:new一个对象,使用InsertOnSubmit方法将其加入到对应的集合中,使用SubmitChanges()提交到数据库. NorthwindDataContext db = new NorthwindDataContext(); var newCustomer

LINQ to SQL语句(1)之Where

Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的 ,而判断条件就是它后面所接的子句. Where操作包括3种形式,分别为简单形式.关系条件形式.First()形式.下 面分别用实例举例下: 1.简单形式: 例如:使用where筛选在伦敦的客户 var q = from c in db.Customers where c.City == "London" select c; 再如:筛选1994 年或之后雇用的雇员

LINQ to SQL语句(4)之Join

1.一对多关系(1 to Many): var q = from c in db.Customers from o in c.Orders where c.City == "London" select o; 语句描述:Customers与Orders是一对多关系.即Orders在Customers类中以 EntitySet形式出现.所以第二个from是从c.Orders而不是db.Orders里进行筛选 .这个例子在From子句中使用外键导航选择伦敦客户的所有订单. var q =

LINQ to SQL语句(7)之Exists/In/Any/All/Contains

Exists/In/Any/All/Contains操作符 适用场景:用于判断集合中元素 ,进一步缩小范围. Any 说明:用于判断集合中是否有元素满足 某一条件:不延迟.(若条件为空,则集合只要不为空就返回True,否则为 False).有2种形式,分别为简单形式和带条件形式. 1.简单形式: 仅返回没有订单的客户: var q = from c in db.Customers where !c.Orders.Any() select c; 生成SQL语句为: SELECT [t0].[Cus

LINQ体验(7)——LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Contains

我们继续讲解LINQ to SQL语句,这篇我们来讨论Group By/Having操作符和Exists/In/Any/All/Contains操作符. Group By/Having操作符 适用场景:分组数据,为我们查找数据缩小范围. 说明:分配并返回对传入参数进行分组操作后的可枚举对象.分组:延迟 1.简单形式: var q = from p in db.Products group p by p.CategoryID into g select g; 语句描述:使用Group By按Cat

LINQ to SQL语句之Select/Distinct和Count/Sum/Min/Max/Avg (转)

Select/Distinct操作符 适用场景:o(∩_∩)o- 查询呗. 说明:和SQL命令中的select作用相似但位置不同,查询表达式中的select及所接子句是放在表达式最后并把子句中的变量也就是结果返回回来:延迟. Select/Distinct操作包括9种形式,分别为简单用法. 匿名类型形式.条件形式.指定类型形式.筛选形式.整形类型形式. 嵌套类型形式.本地方法调用形式.Distinct形式. 1.简单用法: 这个示例返回仅含客户联系人姓名的序列. var q = from c i