私は現在、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
本当に感謝しています。