Cur*_*ite 30 sql-order-by linq-to-sql
我使用以下查询语法
from table
where
where
orderby
orderby
Run Code Online (Sandbox Code Playgroud)
第一个orderby是日期,第二个orderby是日期.我认为这会像orderby那样工作,但似乎正在做其他事情.
如何在不使用扩展语法的情况下使用上述语法来执行命令.(得到它了)
什么命令,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子句中,但顺序与您的预期相反.
在查询表达式语法中执行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
| 归档时间: |
|
| 查看次数: |
49071 次 |
| 最近记录: |