我正在学习 LINQ-to-SQL,一切都很顺利,直到发生了一些奇怪的事情:
我试图做一个例子distinct
,所以,使用 Northwind 数据库,我编写了以下查询:
var query =
from o in db.Orders
orderby o.CustomerID
select new
{
o.CustomerID
};
如果我打印 LINQ-to-SQL 为存储在其中的查询生成的 SQL,query
它看起来像这样:
SELECT [t0].[CustomerID]
FROM [dbo].[Orders] AS [t0]
ORDER BY [t0].[CustomerID]
因此,像往常一样,查询将按字母顺序排列的表中的所有CustomerID
for each 。Order
Orders
但!如果我使用这样的Distinct()
方法:
var query = (
from o in db.Orders
orderby o.CustomerID
select new
{
o.CustomerID
}).Distinct();
查询带来了Distinct
子句的预期结果,但是CustomerID
尽管我写了 s 没有排序orderby o.CustomerID
!
第二个 LINQ 查询的 SQL 查询如下:
SELECT DISTINCT [t0].[CustomerID]
FROM [dbo].[Orders] AS [t0]
正如我们所见,**ORDER BY
缺少该子句。这是为什么?
为什么ORDER BY
我使用该Distinct()
方法时该子句会消失?