例如,我有10000000条记录的表格,并在内存中列出了,其中有100000个ID。Linq2Sql通过多个ID选择记录?
如何通过这些ID选择所有记录? 很显然,我可以做这样的:
var ids = GetIds();
var result = from q in ctx.Records
where ids.Contains(q.Id)
select q;
但是,如果我不喜欢这样,就会有两个问题:
畸形率在生成的SQL每次使用此查询时间。
O(N)complexety为每一行。所以,我会在几年后收到我的结果。
我该怎么做?这是怎么做到的linq2sql
或者这是不可能绕过?
更新
- GetIds - 该函数返回约100.000 IDS。不,我不能加入它。 这是计算。
是的,我测试了它,我调试了它,看到了什么产生。这是这样的:
SELECT * FROM Records WHERE id IN (/*one hundreds of thousand goes here O_O*/)
简单的数学:10.000.000 x 100.000会给时间复杂性1.000.000.000.000。这是非常没有效率的。
什么让你觉得它是每个行的O(N)? – Andrey
什么是GetIds?这是从哪里来的,返回类型是什么? –
你测试过它很慢吗?它将被翻译成'WHERE ID IN(1,2,3,4,5,...,100000)'查询。当然,这不是最好的方法(因此您可以使用用户定义的表类型和表值参数,但不再使用LINQ-to-SQL)。 –