残念ながら、SQL Serverは2100パラメータを超えるパラメータリストを処理できません。私は、バッチモードで実行するとこの制限を超えるいくつかのクエリを持っています。それでも私が望む結果を得るために、データセットをすばやく循環させるために、私はSkip(i).Take(2000)
をforループで使用することに決めました。なぜ、連合または連合の結果を空のリストにできないのですか?
私が準備していなかったのは、Union
とConcat
の両方が、ただインスタンス化されたばかりのものではないことが、IEnumerable
にあることです。確かにそれは空ですが、私は彼らの使い方について何か基本的なものを見逃しているに違いありません。とにかく、問題を解決するために、リストとAddRange
を使用して終了しました。私はNHibernateを使用していますが、なぜUnion
とConcat
が機能していないのかを考える必要はありません。
var machineResults = new List<Machine>();
for (int i = 0; i < machines.Count(); i += 2000)
{
// I would have expected Union or Concat to work here
machineResults.AddRange(GetSession().CreateQuery(
@"select distinct m
from Machine m
where m in (:MachinesList)") // there's more criteria than this
.SetParameterList("MachinesList",
machines.Skip(i).Take(2000).ToList())
.List<Machine>());
}
return machineResults;
は、だから私はUnion
とConcat
について何をしないのですか?なぜ彼らは上記の声明の中で働かないのですか?私はAddRangeがなぜ機能するのか理解していますが、結果の一意性が気になり、Union
を使いたかったのですが?
Doh!私の記憶をジョギングしてくれてありがとう。遅いです、私は寝るつもりです。 – ahsteele