社員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未満の数)に分割してクエリを実行して連結すればよい。
やり方はこのポストを参照