私は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]
したがって、いつものように、クエリはすべてのCustomerIDfor 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()