私はLinqToSQLを使用して、多くの項目を含むIN節を生成しようとしています。私の元のコードは、次のようなものでした。LinqToSQL句内
context.Employees.Where(p => EmployeeIDs.Contains(p.EmployeeID));
これは、各従業員IDがSQLパラメータとしてin節を生成することになります。問題は、2100を超えるパラメータを渡すと例外がスローされることです。私は複数のクエリを実行し、結果を組み合わせることで、アプリケーションの他の場所で作業しました。それは単純なケースでは大丈夫ですが、私はもう少し複雑なことをやっています。これが最善の解決策ではないと思います。とにかく、含まれてい
は
EmployeesID IN (@p0, @p1, @p2)
のようなものを生成しますが、これを行うには、それを説得する方法はありますか?
EmployeesID IN (23, 582, 3948)
私は、動的なクエリの例を使用しての道を行き始めたが、その後、動的LINQコードではなく、動的SQLを書くためであると考えられることに気づきました。それから、ExecuteQueryが見つかりましたが、私が望むクエリの特定のセクションだけを手動で作成することはありません。 (これは、パラメータを使用せずに、IN生成する場合)
context.Employees
.Where(p => p.Active == true)
.Where("EmployeeID IN (23, 582, 3948)");
またはできれ:
具体的には、私のような何かをしたいと思います
context.Employees
.Where(p => p.Active == true)
.Where(p => p.In("EmployeeID", EmployeeIDs));
これを行うにはどのような方法を?ありがとう。
ネストされたクエリの代わりに 'join'を使用して、別のバージョンのサンプルを含めることができます。私はあなたのものに似た何かを投稿していたので、ただの提案です。 – shaunmartin
私の場合、従業員IDはユーザーによって提供されます。従業員のリストが表示され、必要なものを選択します。だから私はこれがうまくいくとは思わない。 – Dan
私はあなたが示唆したように、よりスマートなクエリを作成しようと考えました。それがうまくいくかどうかはわかりません。ユーザーが望んでいなかったレコードが含まれる可能性があることがわかります。たとえば、アクティブなすべての従業員のリストが表示され、次に他のユーザーがアクティブなデータを更新した場合、最初のユーザーは結果を表示するために何かを行い、現在は間違った従業員が含まれます。 – Dan