Linq to sql 使用T-SQL和LINQtoSQL的标记过滤查询?
我试图弄清楚如何允许用户在文本框中输入一系列标记(用空格分隔的关键字),以过滤结果网格 以下是表格:Linq to sql 使用T-SQL和LINQtoSQL的标记过滤查询?,linq-to-sql,tags,Linq To Sql,Tags,我试图弄清楚如何允许用户在文本框中输入一系列标记(用空格分隔的关键字),以过滤结果网格 以下是表格: 数据包 *PacketID 名字 包装标签 *PacketTagID PacketID 塔吉德 标签 *TagID 名字 以下是不带WHERE参数的基本查询: SELECT Packets.Name, Tags.Name AS Tag, PacketTags.PacketTagID FROM Packets INNER JOIN
数据包
*PacketID
名字
包装标签
*PacketTagID
PacketID
塔吉德
标签
*TagID
名字
以下是不带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 to SQL中实现这一点,假设内存中有一个标记列表:
var query = from p in DataContext.Packets
where p.Tags.Intersect(listOfMustHaveTags).Count() == listOfMustHaveTags.Count()
select p;
我在这里使用intersect检查必备标记集是否完全包含。也许还有一个更简单的解决方案。创建一个函数,该函数接受以空格分隔的标记列表并返回一个表。将上面的查询内部连接到该函数的结果 有几个函数可以实现这一点。这里有两个:
该函数也可以通过linq调用sql。Oh和顺便说一句。在任何人怀疑之前:Intersect由L2S linq提供程序支持。当我使用此Intersect时,如您所建议的:无法将“System.Collections.Generic.List”类型的对象强制转换为“System.Collections.Generic.IEnumerable”1[MB.PacketTag]'。您能发布完整的代码吗?这是一个简单的错误。很抱歉延迟-我将在本周末更新完整的代码。