[.NET][LINQ][TroubleShooting] この RPC 要求に指定されたパラメーターが多すぎます。最大数は 2100 です。

社員IDのリストint[] employeeIdsに合致する社員をデータベースから検索する場合、下記のようにEnumerable.Containsを使用したクエリ式を記述する。

var query = from e in context.Employees
            where employeeIds.Contains(e.Id)
            select e;

この式のWHERE条件はLINQ to SQL機能によって、下記のSQLに変換される

  WHERE e.Id IN (要素1, 要素2, …)

この際、employeeIdsの要素数が2,100を超えると下記のような例外が発生するようだ

System.Data.SqlClient.SqlException: 着信の表形式のデータ ストリーム (TDS)
リモート プロシージャ コール (RPC) プロトコル ストリームが不適切です。
この RPC 要求に指定されたパラメーターが多すぎます。最大数は 2100 です。

これを回避するにはemployeeIdsを2000要素ごと(2100未満の数)に分割してクエリを実行して連結すればよい。
やり方はこのポストを参照

コメントを残す