我正在开发一个使用LinqToSQL的应用程序。作为这个的一部分,我创建了一个整数列表,它们表示我想要筛选的键。在过去的每一次当我这样做,并想加入我的列表和数据表我得到以下错误:LinqToSQL将本地列表连接到表 - 混淆
Local sequence cannot be used in LINQ to SQL implementation of query operators except the Contains() operator
现在,这是很好的,因为,我的理解是,这是一个limitaiton/LinqToSQl的功能。我一直在使用如图所示,包含了我的查询操作:
List<CargoProduct> cargoProducts = context.CargoProducts
.Where(cp => cargos.Contains(cp.CargoID))
.ToList();
最近,我遇到了2100项限制在包含,所以一直在寻找其他的方法来做到这一点,最终想出以下:
List<CargoProduct> cargoProducts = context.CargoProducts.AsEnumerable()
.Join(cargos, cp => cp.CargoID, c => c, (cp, c) => cp)
.ToList();
现在,这工作得很好,所以我组建了一个知识共享电子邮件的情况下,他们跨越这个限制附带的其他开发商。我试图让错误信息等摆放在一起的另一个查询比我期望的失败:
List<CargoProduct> results = (from c in cargos
join cp in context.CargoProducts on c equals cp.CargoID
select cp).ToList();
出乎我的意料,这不仅不会引发错误,但它返回完全相同的结果作为先前的查询。那么,我在这里错过了什么?我相信这是显而易见的事情!
仅供参考上下文是我LinqToSQl连接和货物被实例化:
List<int> cargos = context.Cargos.Select(c => c.CargoID).ToList();
更新
正如它确实似乎是在我参加的东西的顺序答复中提到,作为如果我用了那么下面我得到预期的错误消息:
List<CargoProduct> test3 = (from cp in context.CargoProducts
join c in cargos on cp.CargoID equals c
select cp).ToList();
有趣的功能,我想我明白为什么它是做什么ð OES。可能是一个很好的解决方法,而不是使用包含较小数据集的包含。
那么,它允许你这样做的原因是因为你实际上并没有传入值,它查询并返回整个表,然后从c#过滤它,而不是在SQL中过滤它。打开SQL分析器,看看它传递了什么〜_〜) – Ricc