0

どの構文の方がパフォーマンスが向上しますか?EF6でのLINQ:クエリ構文とメソッド呼び出しの間にパフォーマンスの面で違いはありますか?

var vRec = (bNoTracking ? tblOrders.AsNoTracking() : tblOrders); 
return vRec 
    .Where(x => (x.WarehouseId == iWarehouseId) && (x.OrderId == iOrderId)) 
    .FirstOrDefault<tblOrder>(); 

OR

var vRec = (bNoTracking ? tblOrders.AsNoTracking() : tblOrders); 
return (from rec in vRec 
     where (rec.WarehouseId == iWarehouseId) && (rec.OrderId == iOrderId) 
     select rec) 
     .FirstOrDefault<tblOrder>(); 

この質問は、と(SQLiteのための)EF-7バージョン7.0.0-RC1-最終(SQL Expressの2014用)EF-6のためです。

注:私はコーディングスタイルの相違についての意見を探しているわけではなく、お互いを好む技術的理由があるかどうかだけです。

+1

生成されたSQLを検査します。私は結果が同じであると想像していますが。 – Rob

+0

「違い」は何ですか?そしてそれはEFのバージョン間でどのように関連していますか? – user2864740

+0

最初はメソッド構文を使用し、2番目はクエリ構文を使用しています。しかし同じ質問。 –

答えて

3

両方のクエリが同じSQLに変換されるため、パフォーマンスは同じになります。 「流暢な」構文(.Where())またはLINQクエリ式(where)を好むかどうかによって異なります。

次のように私のテストMSSQLデータベースから生成されたSQLは、LINQPadと明らかにした:

enter image description here

これは買ってあげるよう最適化されたとして約になりそうだので、私はそれ以上の微調整を言わないだろうこの選択を何らかのループで実行している場合を除き、必要です。

+4

具体的には - クエリ構文はメソッド構文に変換され、次にそれがSQL(またはプロバイダが使用するクエリ言語/構文) - [LINQ(C#)のクエリ構文とメソッド構文](https://msdn.microsoft。 com/ja-us/library/bb397947.aspx) –

関連する問題