これが私のシナリオです:
C# フレームワークにセット ロジックを実装しました。セットには大量のオブジェクトが含まれる場合があり、最悪の場合は最大 100 万個になることもあります。セットには Doc と呼ばれるオブジェクトのリストだけが含まれていると仮定します。オブジェクトが多数になる可能性があるため、セットの作成方法と使用方法を開発者が選択できるようにしたいと考えています。
小さいセットの場合、開発者は新しいセットを作成し、そのセットに doc オブジェクトを追加するだけです。ユニオン、インターセクトなどの通常のセット ロジックを使用できます。その後、開発者は任意の時点で、セットにプライマリ ID が割り当てられる OR レイヤーを使用してセットを永続化できます。
データベースに保持されている非常に大きなセットの場合、データベースから doc オブジェクトの ID を抽出し、SQL 2008 CLR でセットを操作できるようにすることで、ID をセット オブジェクトに保存するプロセスを回避したいと考えています。 . この署名のような単純な関数が必要です。
public void AddSetMembers(int setID, Expression<Func<Doc, bool>> Where)
これにより、開発者は、ID をセットに追加することだけを目的としてデータベースからすべての ID を抽出することなく、Expression に一致するセットに任意のドキュメントを追加できます。
私の質問は、ストアド プロシージャでこの実装にどのようにアプローチするのが最善ですか? どうにかしてラムダをストアド プロシージャに渡すことはできますか? IDoc インターフェイスを実装して CLR にロードし、次のような署名を持つことを考えていました。
public void AddSetMembers(int setID, Expression<Func<IDoc, bool>> Where)
ただし、ラムダを SP に渡す必要があります。開発者がさまざまな条件を使用してセットを作成できるように、フレームワークを十分に柔軟にしたいと考えています。