エンティティに対するLINQのパフォーマンス対ESQL

entity-framework entity-sql linq-to-entities

質問

Entity Frameworkを使用する場合、ESQLはLinq to Entitiesよりもパフォーマンスが優れていますか?

私はエンティティにLinqを使うことを好む(主に強い型チェックのために)が、私の他のチームメンバーの何人かはESQLを使う理由としてパフォーマンスを挙げている。どちらの方法を使用するかについての長所/短所の詳細を知りたいと思います。

受け入れられた回答

最も明白な違いは次のとおりです。

実体へのLinqは、素晴らしいクエリ理解構文を含む、強く型付けされたコードです。 「選択」の前に「開始」があるという事実は、IntelliSenseがあなたを助けることを可能にします。

Entity SQLは、SELECTステートメントがFROMの前にくる構文のような、より身近なSQLを使用した従来の文字列ベースのクエリを使用します。 eSQLは文字列ベースであるため、動的クエリは実行時に文字列操作を使用して従来の方法で構成できます。

それほど明白ではない主な違いは次のとおりです。

エンティティへのリンクでは、 'select new {...}'構文を使用して、形状を変更したり、クエリの結果を必要な形状に「投影」したりできます。 C#3.0で新たに追加された匿名型はこれを可能にしました。

常にObjectQuery <T>を返す必要があるため、Entity SQLを使用した射影は不可能です。シナリオによってはObjectQuery <object>を使用することもできますが、.Selectは常にObjectQuery <DbDataRecord>を返すという事実を回避する必要があります。下記のコードを参照してください。

ObjectQuery<DbDataRecord> query = DynamicQuery(context,
        "Products",
        "it.ProductName = 'Chai'",
        "it.ProductName, it.QuantityPerUnit");

public static ObjectQuery<DbDataRecord> DynamicQuery(MyContext context, string root, string selection, string projection)
{
    ObjectQuery<object> rootQuery = context.CreateQuery<object>(root);
    ObjectQuery<object> filteredQuery = rootQuery.Where(selection);
    ObjectQuery<DbDataRecord> result = filteredQuery.Select(projection);
    return result;
}

ここここで詳細にチームメンバーの一人によって説明される他のより微妙な違いがあります


人気のある回答

ESQLは、特に悪質なSQLを生成する可能性もあります。継承されたクラスを使用していたこのようなクエリの問題を追跡する必要がありました。そして、4行というちょっとしたESQLが100000文字のモンスターSQLステートメントに翻訳されていることがわかりました。

Linqでも同じことができましたか?コンパイルされたコードはもっと扱いやすいものでした、20行のSQLを言いましょう。

加えて、他の人々が言ったように、Linqは強いタイプですが、edit and continue機能なしでデバッグするのは非常に面倒です。

広告



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ