2010-05-02 62 views
0

我想弄清楚如何讓用戶在文本框中輸入一串標籤(用空格分隔的關鍵字)來過濾結果網格。標記過濾使用T-SQL和Linq-to-SQL進行查詢?

下面是表:


PACKETS
*分組ID
名稱


PACKETTAGS
* PacketTagID
分組ID
個 標籤識別


標籤
*標籤識別
名稱


這裏是沒有WHERE參數基本查詢:

SELECT  
     Packets.Name, Tags.Name AS Tag, PacketTags.PacketTagID 
FROM   
     Packets 
INNER JOIN 
     PacketTags ON Packets.PacketID = PacketTags.PacketID 
INNER JOIN 
     Tags ON PacketTags.TagID = Tags.TagID 

我需要過濾掉所有數據包沒有與任何單詞匹配的標籤,但也僅包括具有在文本串中輸入的標籤的分組(空格分隔標籤,當輸入到文本框中時)分開標籤

我以基礎開始首先在T-SQL搞清楚了這一點,但最終我需要能夠做到這一點的LINQ到SQL

回答

1

假設你有你的標籤的存儲器中的列表:

var query = from p in DataContext.Packets 
      where p.Tags.Intersect(listOfMustHaveTags).Count() == listOfMustHaveTags.Count() 
      select p; 

我使用在這裏相交以檢查必須具有的標籤集是否完全包含。也許有更簡單的解決方案。

+0

哦,順便說一句。之前有人想知道:Intersect是由L2S Linq提供商支持的。 – 2010-05-02 17:16:26

+0

我得到這個錯誤,當我使用這個相交,就像你建議:無法投入'System.Collections.Generic.List'1 [System.Guid]'類型的對象來鍵入'System.Collections.Generic.IEnumerable'1 [ MB.PacketTag]」。 – EdenMachine 2010-05-02 20:32:55

+0

你可以發佈你,請發佈你的完整代碼?這是一個簡單的錯誤。 – 2010-05-04 06:59:25