1

我有一个SQL这样的标签表:

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

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

并让它返回: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 做到这一点?

4

1 回答 1

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受支持和不受支持的 LINQ 方法(LINQ to Entities)列表中,因此应该可以工作。但即使是这样,我也可能会检查生成的 SQL 以确保它不会过于复杂并且不是很有效。

于 2013-07-09T20:42:02.957 回答