【发布时间】:2012-09-14 17:05:01
【问题描述】:
我正在学习 LINQ-to-SQL,一切都很顺利,直到发生了奇怪的事情:
我试图以distinct 为例,因此,我使用 Northwind dabatase 编写了以下查询:
var query =
from o in db.Orders
orderby o.CustomerID
select new
{
o.CustomerID
};
如果我打印 LINQ-to-SQL 为存储在 query 中的查询生成的 SQL,它看起来像这样:
SELECT [t0].[CustomerID]
FROM [dbo].[Orders] AS [t0]
ORDER BY [t0].[CustomerID]
因此,像往常一样,查询会在Orders 表中按字母顺序为每个Order 带来所有CustomerID。
但是!如果我像这样使用Distinct() 方法:
var query = (
from o in db.Orders
orderby o.CustomerID
select new
{
o.CustomerID
}).Distinct();
查询带来Distinct子句的预期结果,但CustomerIDs没有排序尽管我写了orderby o.CustomerID!
第二个 LINQ 查询的 SQL 查询如下:
SELECT DISTINCT [t0].[CustomerID]
FROM [dbo].[Orders] AS [t0]
正如我们所见,**ORDER BY 子句不见了。这是为什么呢?
为什么当我使用Distinct() 方法时ORDER BY 子句消失了?
【问题讨论】:
-
顺便说一句,对于这样的查询来说,lambda 语法要简单得多:
var query = db.Orders.Select(o=>o.CustomerId).Distinct();
标签: c# .net linq linq-to-sql