2010-05-02 54 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