2017-07-16 3 views
-1
//Limit records, order remaining records, then take first or default. 
x.Where(predicateExpression) 
.OrderBy(rankExpression) 
.FirstOrDefault(); 

//Order records, take first of ordered set that matches predicate. 
x.OrderBy(rankExpression) 
.FirstOrDefault(predicateExpression) 

上記のLinqクエリがLinq-to-EntitiesのSQLに変換されたときに同等かどうか不思議です。 FirstOrDefaultは、順序付けされたセットを順番に反復して、述語と一致しないレコードをスキップします。これは、順序付けの前にそれらをフィルタリングするのと同じであるためです。しかし、Linq-To-Entitiesでは、これがSQLに変換されるため、注文後に述語(where '句)を適用すると、firstまたはdefaultが動作する中間の順序付けられていないセットが生成されることに懸念します。これらのうちの1つは、実行時にLinq-to-Entitiesで有効ではないかもしれません。これらの2つのLinqクエリはLinq-to-Entitiesで機能的に同等ですか?

答えて

0

これら2つのLINQクエリは、SQL Serverプロファイラに応じて次のような形式の同じSQLクエリを生成します。

--pseudo-SQL 
SELECT TOP (1) <<columns from Extent1>> 
FROM <<tableName>> AS [Extent1] 
WHERE <<predicateExpression>> 
ORDER BY <<rankExpression>> ASC 
関連する問題