首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq-to-sql orderby

Linq-to-sql orderby
EN

Stack Overflow用户
提问于 2010-05-25 19:52:57
回答 4查看 57.1K关注 0票数 34

我使用以下查询语法

代码语言:javascript
复制
from table
where 
where
orderby 
orderby

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

  1. 如何在不使用扩展语法的情况下使用上述语法来完成orderby操作。(明白了)
  2. 秩序是怎么做的?
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-05-25 19:59:48

如何在不使用扩展语法的情况下使用上述语法来完成orderby操作。

在字段之间使用逗号:

代码语言:javascript
复制
orderby a, b

秩序是怎么做的?

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

代码语言:javascript
复制
var query = from x in l
            orderby x.A
            orderby x.B
            select x;

相当于:

代码语言:javascript
复制
var query = from x in l
            orderby x.B, x.A
            select x;

其结果是,orderby术语与您可能想要的内容进行了交换。

用LINQ 测试它

这可以通过在LINQ中进行测试来验证。我创建了以下查询:

代码语言:javascript
复制
var query = from a in dc.Orders
            orderby a.Date
            orderby a.CustomerID
            select a;

这是生成的SQL:

代码语言:javascript
复制
SELECT [t0].[ID], [t0].[CustomerID], [t0].[Date], [t0].[Description]
FROM [dbo].[Order] AS [t0]
ORDER BY [t0].[CustomerID], [t0].[Date]

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

票数 55
EN

Stack Overflow用户

发布于 2010-05-25 20:01:53

在ThenBy中直接执行查询表达式语法,只需按照初始顺序使用逗号和第二条语句:

代码语言:javascript
复制
// 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;

使用标准查询运算符(扩展方法)应用第二个orderby实际上将第二个orderby应用于查询结果的结果,其中包括第一个orderby。实际上,只有第二个订单才适用,尽管您仍然会花费CPU时间计算第一个订单。

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

因为IOrderedEnumerable继承自IEnumerable,所以可以在调用OrderBy、OrderByDescending、ThenBy或ThenByDescending的结果上调用OrderBy或OrderByDescending。这样做会引入一个新的主排序,它忽略了先前建立的排序。

票数 9
EN

Stack Overflow用户

发布于 2012-07-13 13:07:08

ThenBy运算符对序列应用次要的升序排序顺序。类似于在T中应用二级排序顺序,类似于:

代码语言:javascript
复制
Select * from Customer order by FirstName,lastName

在linq中,我们可以这样写成:

代码语言:javascript
复制
var thenby = mode.CustList.Select(cus => new
        {
            cus. FirstName,
            cus. LastName,
            cus. EmailAddress
        }).OrderBy(cus => cus. FirstName).ThenBy(cus => cus. LastName);

您可以在这里查看更多有关这方面的信息:C-夏普/204

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2908029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档