from f in CUSTOMERS
where depts.Contains(f.DEPT_ID)
select f.NAME
depts
部門IDのリスト(IEnumerable<int>
は)(3000のDEPTのidの周りに言って、あなたが大規模なリストを渡すまで、このクエリは正常に動作します使用した場合)(2100パラメータの上限(SQL Serverの)が含ま打撃
です)...その後、私はこのエラーを取得する:
The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Too many parameters were provided in this RPC request. The maximum is 2100.
私は私のクエリを変更:
var dept_ids = string.Join(" ", depts.ToStringArray());
from f in CUSTOMERS
where dept_ids.IndexOf(Convert.ToString(f.DEPT_id)) != -1
select f.NAME
IndexOf()
を使用するとエラーは修正されましたが、クエリが遅くなりました。これを解決する他の方法はありますか?本当にありがとう。
[ようそう](http://stackoverflow.com/questions/567963/linq-expression-to-return-property-value/568771#568771)(それをバッチ処理についてどのように管理可能な部分に)。その他の(LINQ以外の)オプションには、CSVと「分割」UDF、およびテーブル値パラメータ(SQL2008)が含まれます。 –
Mark、1から2000までのさまざまなパラメータがある場合、 'contain'の最良の代替案は何ですか?私はこれがdbのプランをたくさん作成することを知っていますが、 '<入力パラメータ>のような '%<検索フィールド>%''の使用はより多くのdbリソース時間を要するようです。私は何を使うべきですか? –
2100パラメータの制限の問題はEntity Frameworkに存在しません:http://stackoverflow.com/questions/8898564/entity-framework-hitting-2100-parameter-limit – nmit026