我使用以下查询语法
from table
where
where
orderby
orderby其中,第一个订单是日期,第二个订单是日期。我认为这会像orderby那样工作,但似乎是在做其他事情。
发布于 2010-05-25 19:59:48
如何在不使用扩展语法的情况下使用上述语法来完成orderby操作。
在字段之间使用逗号:
orderby a, b秩序是怎么做的?
当您连续两次使用orderby时,概念上的元素将首先使用第一个orderby进行排序,然后再使用第二个orderby进行排序。由于排序被定义为稳定排序 (与第二个orderby绑定的对象将保持与第一个orderby排序后相同的顺序),这实际上意味着:
var query = from x in l
orderby x.A
orderby x.B
select x;相当于:
var query = from x in l
orderby x.B, x.A
select x;其结果是,orderby术语与您可能想要的内容进行了交换。
用LINQ 测试它
这可以通过在LINQ中进行测试来验证。我创建了以下查询:
var query = from a in dc.Orders
orderby a.Date
orderby a.CustomerID
select a;这是生成的SQL:
SELECT [t0].[ID], [t0].[CustomerID], [t0].[Date], [t0].[Description]
FROM [dbo].[Order] AS [t0]
ORDER BY [t0].[CustomerID], [t0].[Date]请注意,orderby a.Date不会被忽略。这两个术语都包含在ORDER子句中,但顺序与您可能希望的相反。
发布于 2010-05-25 20:01:53
在ThenBy中直接执行查询表达式语法,只需按照初始顺序使用逗号和第二条语句:
// 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。这样做会引入一个新的主排序,它忽略了先前建立的排序。
发布于 2012-07-13 13:07:08
ThenBy运算符对序列应用次要的升序排序顺序。类似于在T中应用二级排序顺序,类似于:
Select * from Customer order by FirstName,lastName在linq中,我们可以这样写成:
var thenby = mode.CustList.Select(cus => new
{
cus. FirstName,
cus. LastName,
cus. EmailAddress
}).OrderBy(cus => cus. FirstName).ThenBy(cus => cus. LastName);您可以在这里查看更多有关这方面的信息:C-夏普/204
https://stackoverflow.com/questions/2908029
复制相似问题