1
我想編寫一個Linq查詢(SQL後端),它通過來自多個列的值集合來限制行。爲了說明,一個天真的SQL查詢可能是這樣的,如果我知道了,前面的所有值:如何編寫一個Linq2Sql查詢,該查詢使用一組組合鍵或元組來限制行?
SELECT *
FROM myTable
WHERE (col1 = val1 AND col2 = val2 AND col2 = val3)
OR (col1 = val4 AND col2 = val5 AND col2 = val5)
OR (col1 = val6 AND col2 = val7 AND col2 = val8)
-- etc...
如果我在SQL在寫這一點,我會考慮使用一個加入反對臨時表,表值參數或類似構造。我將如何用Linq2Sql完成此任務?我的值不存儲在另一個表中,是從代碼和用戶輸入計算的,並且通常不會預先知道 - 我將它們作爲元組的集合接收。
我知道我無法加入內存集合而無需首先將整個表加載到內存中,並且在這些情況下僅限於使用Contains
,導致產生WHERE ... IN
子句。是否有可能使用這種技術的複合鍵和元組?
或者,我可以在上面的示例中手動構建WHERE
子句的表達式樹,模擬WHERE ... OR
子句。有沒有更好的辦法?我懷疑這個SQL語句在條款中有幾百個OR
語句時效率不高。
感謝您的反饋!對不起,我不清楚我的問題(我會編輯) - 我實際上並不知道所有的值,因爲它們作爲一個集合傳遞給一個函數。 – 2014-10-07 17:05:59
你的意思是你在編譯時會得到一個類似未知大小的列表?你需要匹配列表的第x個colX? –
2014-10-07 17:26:28
是的,想象這個集合的類型是List>'。現在我需要爲列表中的每個元素創建一個謂詞,如下所示:'where(mt.Col1 == list [0] .Item1 && mt.Col2 == list [0] .Item2 && mt.Col3 == list [ 0] .Item3)|| (/ *重複列表[i] */...) 我可以創建一個循環,並建立一個表達式樹來做到這一點,但我很好奇,如果有一個更簡單的方法。 –
2014-10-07 17:43:00