例如,我有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)。 –