0

リポジトリ外のエンティティに Linq を公開/漏洩することなく、データベースでデータをフィルタリングしながら、Linq を使用してリポジトリ外でクエリを作成していますか? もちろん、ラムバ式を Query() メソッドや仕様オブジェクトのパラメーターとして作成することもできますが、リポジトリで使用されているデータ プロバイダーに関係なく、Linq を使用して効率的なアドホック クエリを作成したいと考えていました。

例えば:

var myProductID = myRepo.Query()
                  .Where( p => p.color.Contains("green") )
                  .Select( p => p.ID.ToString() );

概念は相互に排他的です。

4

1 に答える 1

2

しかし、リポジトリで使用されているデータ プロバイダーに関係なく、どうにかして Linq を使用して効率的なアドホック クエリを作成したいと考えていました。

このアイデアは失敗する運命にあります。問題は、すべてのラムダ式が、すべての LINQ プロバイダーによって、そのプロバイダーが処理できるものに変換できるわけではないということです。これが、恐ろしい「LINQ to Entities はメソッドを認識しません....」または他の LINQ プロバイダーの類似の例外メッセージの原因です。LINQ to SQL では処理できる式がありますが、LINQ to Entities では処理できません。また、その逆もあります。NHibernate の LINQ プロバイダーに同様の問題を投げかけます。

つまり、リポジトリを介してクエリを実行する LINQy の方法を公開することは、漏れやすい抽象化です。避けて、避けて、避けて。

于 2012-04-18T01:38:18.560 に答える