2011-11-23 28 views
0

有沒有辦法檢查列是否包含列表中的全部或任何項目?示例「ABCDEFG」是我的列值。 「A」「C」「L」是我列表中存儲的一個列表。我需要查找包含至少一個項目的行。然後,項目包含在我的列表中的所有項目(基本或/和作爲SE搜查必須)LINQ to SQL基本列搜索正在做列表的OR/AND <string>(VB.net)

注意我用的VB.net,不C#

謝謝!

回答

1

Linq2Sql不支持String類型的許多方法。如果您記得您的linq代碼將被轉換爲SQL,那麼這是有道理的。

這裏最好的選擇是在服務器上有一個表來包含你的列表然後編寫一個SQL查詢。

否則,你需要離開Linq2Sql區域,只使用Linq部分。也就是說,選擇所有的數據到客戶端,然後過濾:

Dim letter_list = New List(Of String)(New String() {"A", "C", "L"}) 

Using d = New DataClasses1DataContext 

    Dim contains_any = (From f In d.footest _ 
         Select f).ToList().Where(Function(f) f.v IsNot Nothing AndAlso f.v.Any(Function(c) letter_list.Contains(c))).ToList() 

    Dim contains_all = (From f In d.footest _ 
         Select f).ToList().Where(Function(f) f.v IsNot Nothing AndAlso letter_list.All(Function(s) f.v.Contains(s))).ToList() 


End Using 
+0

這兩個選項都不是真的可能。可以有多達一百萬行,並且該列表是通過搜索動態的。正因爲如此,我動態地生成查詢,並將使用我的entity.executestoredcommand。雖然謝謝! –

+0

@AnthonyGreco然後考慮[全文搜索](http://msdn.microsoft.com/en-us/library/ms142571.aspx)。 ['CONTAINS'](http://msdn.microsoft.com/en-us/library/ms187787.aspx)是你想要的。你可以很容易地創建一個服務器端的功能來搜索並用linq調用它。 – GSerg

+0

GSerg:CONTAINS的問題是它只會做1個項目,而不是多個項目。我可以做column.contains(a)和column.contains(b),但是如果我需要搜索的項目數量不是靜態的,我看不到那個工作 –