Linq-to-sql orderbybyby

Cur*_*ite 30 sql-order-by linq-to-sql

我使用以下查询语法

from table
where 
where
orderby 
orderby
Run Code Online (Sandbox Code Playgroud)

第一个orderby是日期,第二个orderby是日期.我认为这会像orderby那样工作,但似乎正在做其他事情.

  1. 如何在不使用扩展语法的情况下使用上述语法来执行命令.(得到它了)

  2. 什么命令,orderby做什么?

Mar*_*ers 47

如何在不使用扩展语法的情况下使用上述语法来执行命令.

在字段之间使用逗号:

orderby a, b
Run Code Online (Sandbox Code Playgroud)

什么命令,orderby做什么?

当您orderby连续使用两次时,元素在概念上将首先使用第一个进行排序orderby,然后使用第二个进行排序orderby.因为排序被定义为一个稳定的排序(与第二个绑定的对象orderby将保持与第一个排序后相同的顺序,orderby它实际上意味着:

var query = from x in l
            orderby x.A
            orderby x.B
            select x;
Run Code Online (Sandbox Code Playgroud)

相当于:

var query = from x in l
            orderby x.B, x.A
            select x;
Run Code Online (Sandbox Code Playgroud)

结果是这些orderby术语与您可能想要的术语互换.

使用LINQ to SQL进行测试

这可以通过在LINQ to SQL中尝试来验证.我创建了以下查询:

var query = from a in dc.Orders
            orderby a.Date
            orderby a.CustomerID
            select a;
Run Code Online (Sandbox Code Playgroud)

这是生成的SQL:

SELECT [t0].[ID], [t0].[CustomerID], [t0].[Date], [t0].[Description]
FROM [dbo].[Order] AS [t0]
ORDER BY [t0].[CustomerID], [t0].[Date]
Run Code Online (Sandbox Code Playgroud)

请注意,orderby a.Date不会被忽略.这两个术语都包含在ORDER BY子句中,但顺序与您的预期相反.


hem*_*emp 8

查询表达式语法中执行ThenBy 是直截了当的,只需使用逗号和第二个语句跟随初始orderby:

// Create the data source.
List<Student> students = GetStudents();

// Create the query.
IEnumerable<Student> sortedStudents =
    from student in students
    orderby student.Last ascending, student.First ascending
    select student;
Run Code Online (Sandbox Code Playgroud)

使用标准查询运算符(扩展方法)应用第二个orderby实际上将第二个orderby应用于包含第一个orderby的查询结果的结果.实际上,只有第二个orderby将适用,但您仍将花费CPU时间来计算第一个订单.

这实际上是在Enumerable.OrderBy和Enumerable.ThenBy方法的MSDN文档中直接回答的.

由于IOrderedEnumerable继承自IEnumerable,因此可以对OrderBy,OrderByDescending,ThenBy或ThenByDescending的调用结果调用OrderBy或OrderByDescending.这样做会引入一个新的主要排序,忽略先前建立的排序.


小智 8

ThenBy经营者申请二次,升序排列的序列.它类似于在T-SQL中应用二级排序顺序,如:

Select * from Customer order by FirstName,lastName
Run Code Online (Sandbox Code Playgroud)

在linq中我们可以这样写:

var thenby = mode.CustList.Select(cus => new
        {
            cus. FirstName,
            cus. LastName,
            cus. EmailAddress
        }).OrderBy(cus => cus. FirstName).ThenBy(cus => cus. LastName);
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看更多相关信息:http: //dotnetreaders.com/articles/ThenBy_in_LINQ_c-sharp,_Orderby_Thenby_in_LINQ_C-sharp/204