使用linq从字符串数组中查找表中的匹配标记项

时间:2013-07-09 20:37:10

标签: sql arrays linq entity-framework entity

我有一个SQL标签表,如下所示:

Id   |  Tag
-----------------
1    |  car
1    |  red
1    |  sport
2    |  car
2    |  red
2    |  SUV

我想只检索完全匹配的搜索字符串的ID。所以,使用LINQ,我想查询: “汽车,红”

并让它返回:1和2。

然后搜索"car,red,sport"将仅返回1.

我根本不确定如何使用LINQ来做到这一点。如果我执行以下操作(使用EF上下文和表作为示例):

string[] tags = {"car","red","sport"}
var query = context.CarTags.Where(a => tags.Contains(a.Tag)).Select(s=>s);

...当然会返回1& 2。

那么,我如何使用LINQ做到这一点?

1 个答案:

答案 0 :(得分:2)

string[] tags = {"car","red","sport"}

var query = context.CarTags
                   .GroupBy(a => a.Id)
                   .Where(g => tags.All(t => g.Any(a => a.Tag == t)))
                   .Select(g => g.Key);

我不确定它是否可以与LINQ to Entites一起使用,但肯定会尝试一下。

所有使用的方法都在Supported and Unsupported LINQ Methods (LINQ to Entities)列表中列为supported,因此应该可行。但即使它是,我可能会检查生成的SQL,以确保它不会过于复杂,也不会非常有效。