Kee*_*isk 13 distinct sql-order-by linq-to-sql
以下基本LINQ to SQL语句不会导致orderby工作.正如您在T-SQL中看到的那样,没有orderby.你知道为什么吗?
LINQ to SQL:
var results = (from stats in db.t_harvest_statistics
orderby stats.unit_number
select stats.unit_number).Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)
以上TSQL中的结果
SELECT
[Distinct1].[unit_number] AS [unit_number]
FROM ( SELECT DISTINCT
[Extent1].[unit_number] AS [unit_number]
FROM [dbo].[t_harvest_statistics] AS [Extent1]
) AS [Distinct1]
Run Code Online (Sandbox Code Playgroud)
小智 28
这是ORDER BY与DISTINCT相关的SQL和关系代数的限制.
ORDER BY必须在SQL中"进一步"(在"顶层"),因为它是一个视图操作.虽然可以编写具有ORDER BY"进一步"的SQL,但与RA操作相关,它通常会导致未定义的行为(有时会起作用).从这个角度来看,Linq2Sql可以自由地忽略 ORDER BY,但也许一个例外会更好......反正它会不那么微妙;-)(实际上,任何没有提供的Linq提供者都存在同样的问题对Distinct的"更严格"定义.)
删除Distinct()并且Linq2Sql应该再次按预期生成ORDER BY.解决方案只是切换操作顺序,以便ORDER BY再次处于"顶级".
这在LINQ中使用Distinct和OrderBy一文中有所介绍:
这种行为可能看起来很奇怪 问题是,Distinct运算符不会授予它将保持原始值的顺序.应用于LINQ to SQL,这意味着在查询(如queryA)的情况下可以忽略排序约束.
解决方案非常简单:将OrderBy运算符放在Distinct运算符之后,就像在下面的queryB定义中一样:
Run Code Online (Sandbox Code Playgroud)var queryB = (from o in db.Orders select o.Employee.LastName) .Distinct().OrderBy( n => n );
快乐的编码.
| 归档时间: |
|
| 查看次数: |
6292 次 |
| 最近记录: |