0
我想在我們的應用程序中實現一些搜索功能,並且有一種情況,用戶可以從列表中選擇多個主題,並且我們希望返回至少與所選主題中的一個匹配的所有活動。每個活動可以有0到多個主題。如何使用linq2sql查詢獲取嵌套的IN子句?
我可以寫一個直接的SQL查詢給我的結果我想,像這樣:
SELECT *
FROM dbo.ACTIVITY_VERSION av
WHERE ACTIVITY_VERSION_ID IN (
SELECT ACTIVITY_VERSION_ID
FROM dbo.ACTIVITY_TOPIC at
WHERE at.TOPIC_ID IN (3,4)
)
我無法弄清楚是怎麼寫的LINQ查詢(我們正在使用LINQ to SQL)返回相同的結果。
我已經試過:
activities.Where(x => criteria.TopicIds.Intersect(x.TopicIds).Any());
這個作品,如果活動是在內存中的對象列表(即一個LINQ到對象查詢),但我得到一個錯誤,如果我嘗試使用相同的代碼一個命中數據庫的查詢。我收到的錯誤是:
Local sequence cannot be used in LINQ to SQL implementations of query operators except the Contains operator.
我認爲,這意味着LINQ到SQL不知道怎麼翻譯要麼相交或任何(或可能兩者都有)。如果是這樣的話,我明白爲什麼它不能正常工作,但我仍然不知道如何使它達到我想要的效果,而我的Google-fu沒有向我提供任何有用的東西。
這不是它抱怨的「任何」。它抱怨'Intersect'。當涉及本地序列時,只能在您的lambda中使用「Contains」。 (這就是錯誤信息所說的)。 – 2013-05-10 21:28:53