【发布时间】:2015-02-28 02:55:56
【问题描述】:
我有一个巨大的字符串列表,我想将数据库表的记录与它进行比较。最好的解决方案是什么?
您可以假设指定表的名称为ATable,其结构如下:
public class ATable
{
[Key]
public long Id{get;set;}
[Key]
public long Name{get;set;}
}
我写了以下代码
using(var context = new MyDbContext())
{
context.Log = (log) => {Console.WriteLine(log)};
var result = context.ATables.Where(item => hugeList.Contains(item.Name)).ToList();
}
我检查了生成的日志,我看到上面的代码被翻译成 SQL IN(...) 语句,并且由于列表应用程序崩溃的巨大。
我相信有一个很好的方法可以解决这个问题,那么专业人士可以告诉我正确的方法。
谢谢
【问题讨论】:
-
您可以使用
context.ATables.ToList()将其作为对象保存在内存中。然后检查两个 .net 对象之间的条件。 -
你是对的,但如果我的表的记录也很大,那又如何呢?
-
在我看来,您可以创建一个新表。然后将此列表项插入此表。然后在 Linq-To-Entity 的帮助下连接这两个表。并且得到结果后,可以截断第一个表。
-
这主意不错,但我喜欢收集更多建议。谢谢
-
您可能会考虑将
hugeList分成更小的块。例如,一次 20 个值。
标签: c# entity-framework