4

私は現在、Entity Framework を広範囲に使用する大規模なプロジェクトに取り組んでいます。実装した機能の一部は、ユーザー提供のフィルターに基づくさまざまなデータ モデルの動的クエリ (フィルター/並べ替え) です。

これを実現するためにSystem.Linq.Dynamic、さまざまな手段を使用して、 like などの文字列ベースのフィルターを作成"SomeProperty.StartsWith(@P0)"し、これらの文字列 (および付随するパラメーター) を Dynamic Linq 拡張メソッドIQueryable<T>(Whereなど) に渡して、それらはデータベースに対して実行され、誰もが満足しています。

当時、私は式ツリーの漠然とした概念を除いて、これを行う他の方法を知りませんでした。正直に言うと、私はそれらについて理解することができませんでした。動的クエリを実装するための式と私は躊躇しました:)

System.Linq.Dynamicさらに、私が効果的に必要とする機能が、拡張機能で私よりもはるかに賢い人々によって既に書かれているとき、私は車輪を再発明しているように感じました.

現在、現在のコードはすべて、私のエンティティのフィルタリング、ソートなどの一般化されたソリューションとして非常にうまく機能しています。私はそれで十分満足していますが、EF に慣れるにつれて、次のようなものに出くわし始めました。

そして、それSystem.Linq.Dynamicがほぼ6歳で、その間何もしていないことを考えると、私は何かを見逃しているのではないかと思い始めました。または、基本的な点を見逃していますか?

  • 弾丸を噛んで、コードベースを移動して使用する必要がありますEntitySQLか? (これは の精神的な後継者のようなものだとSystem.Linq.Dynamic思いますが、間違っていますか?)

  • それとも、戻って使い方を学ぶ必要がありますか?Expression Treesなぜなら、それらは未来の方法だからです/すべてのクールな子供たちがそれを行うなど? 私は変更のための変更のファンではなく、機能するコードが好きですが、将来のある時点で文字列ベースの動的 linq が行き止まりになり、それを使用することに行き詰まってしまうのではないかと心配しています。

System.Linq.Dynamicとの違いを明確にするのに役立つ人EntitySQL、または に移動する正当な理由を特定できる人がいれば、Expression Trees本当に感謝しています。

4

1 に答える 1

2

私たちのプロジェクトではDynamic Linqを広く使用しています...そのクリーンでうまく機能しますが、そのコードを覗いたり変更したりする場合は非常に複雑です。

Dynamic Linq と EF 6 の組み合わせを使用して私が見つけた問題の 1 つは、EF 6 がクエリ キャッシュを使用してデータの取得を高速化していることと、Dynamic Linq に組み込まれているクエリが EF 6 のこの機能を使用しない方法であることです。クエリキャッシュを使用する場所を変更する必要があります。

これは、Dynamic Linq が新しい EF バージョン向けではないことを示すほんの一例です。Dynamic Linq は、IQuerable のような型指定されていないコレクションを操作したい場合に最適なソリューションですが、維持するのが非常に困難です。

型付き環境 (IQueryable) で作業していただければ幸いです。それ以外の場合は、基本的に Dynamic Linq を変更して、EF 6 を実際に活用する必要があります。

于 2014-02-12T13:34:09.217 に答える