私は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 eachOrder
をアルファベット順に並べたOrders
テーブルに取り込みます。
しかし!次のような方法を使用する場合Distinct()
:
var query = (
from o in db.Orders
orderby o.CustomerID
select new
{
o.CustomerID
}).Distinct();
Distinct
クエリは句の期待される結果をもたらしますが、CustomerID
私が書いたにもかかわらず、sは順序付けられていませんorderby o.CustomerID
!
この 2 番目の LINQ クエリの SQL クエリは次のとおりです。
SELECT DISTINCT [t0].[CustomerID]
FROM [dbo].[Orders] AS [t0]
ご覧のとおり、**ORDER BY
句がありません。何故ですか?
メソッドORDER BY
を使用すると句が消えるのはなぜですか?Distinct()