C# 为什么我不能将Concat或Union结果添加到空列表中?
遗憾的是,SQL Server无法处理超过2100个参数的参数列表。我有几个查询在批处理模式下运行时超过了这个限制。为了仍能得到我想要的结果并快速遍历数据集,我决定在for循环中使用Skipi.Take2000 我没有准备好的是,Union和Concat都需要一个IEnumerable,而不仅仅是实例化才能工作。当然,这是一个空的,但我肯定错过了一些基本的使用。无论如何,为了解决这个问题,我最终使用了List和AddRange。我正在使用NHibernate,但不要认为这就是为什么Union和Concat不起作用的原因C# 为什么我不能将Concat或Union结果添加到空列表中?,c#,lambda,C#,Lambda,遗憾的是,SQL Server无法处理超过2100个参数的参数列表。我有几个查询在批处理模式下运行时超过了这个限制。为了仍能得到我想要的结果并快速遍历数据集,我决定在for循环中使用Skipi.Take2000 我没有准备好的是,Union和Concat都需要一个IEnumerable,而不仅仅是实例化才能工作。当然,这是一个空的,但我肯定错过了一些基本的使用。无论如何,为了解决这个问题,我最终使用了List和AddRange。我正在使用NHibernate,但不要认为这就是为什么Union和C
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;
那么,关于工会和康卡特,我遗漏了什么呢?为什么他们不在上面的陈述中工作?我理解AddRange的工作原理,但如果我担心结果的唯一性,想使用Union呢?Union和Concat是纯方法。它们不会修改运行它们的对象,而是返回一个副本
var a = new [] {1, 2, 3, 4};
var b = new [] {5, 6, 7, 8};
var c = a.concat(b);
在这个代码运行之后
a=>[1,2,3,4]
b=>[5,6,7,8]
c=>[1,2,3,4,5,6,7,8]
也就是说,如果您有machineResults.concatx,那么您实际上并没有修改machineResults集合。相反,您必须使用machineResults=machineResults.concatx.Doh!谢谢你唤起我的记忆。很晚了,我要睡觉了。