我有一个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做到这一点?
答案 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,以确保它不会过于复杂,也不会非常有效。