【发布时间】:2016-11-25 02:50:44
【问题描述】:
需要一个可以帮助我解决这个问题的查询。
这是我的表“标签”:
- id (int)
- 名称(字符串)
- user_id (int)
- hardware_id (int)
我按hardware_id 对“tags”表的结果进行分组。我还有一个标签列表 (List<string>)。
我想在上表中的name 处获取自定义列表中所有标签匹配的组的硬件 ID。
换句话说,我想获取自定义列表标签与其name 匹配的hardware_id。自定义列表中可能有 name 没有匹配项,但所有自定义列表标签都必须在组中,如果满足此需求,我可以获取该组的 Id。
我发现很难解释,也没有得到答案。我考虑过用foreach来做,因为它很难解决,但我也做不到,这样做效率很低。
例子:
列表:['tag1', 'tag2']
表格行:
1, tag1, 5, 1
2, tag2, 5, 1
3, tag3, 5, 1
4, tag4, 5, 2
5, tag5, 6, 2
在这种情况下,我应该得到 1 的 hardware_id,因为虽然其中一个硬件 ID 有 tag3,但它没有任何标签名称不在列表中的行。如果 List 有 'tag4',则不会返回 hardware_id = 1,因为 List 有一个 hardware_id 组没有的标签。
如果 Group 没有 List 拥有的项目,则不会出现在最终结果中。
有人把这段代码给我玩了,但它没有用:
List<decimal> matchingHardareIds = db.tags.GroupBy(x => x.hardware_id)
.Where(x => x.All(s => tags.Contains(s.name.ToLower()) || 0 == tags.Count() && (s.user_id == userId)))
.Select(x => x.Key).ToList();
在该查询中,当我在列表中有一个标签并且在表中我有几个 hardware_id 为 1 的项目并且其中一个的“名称”等于列表中的值时,它将返回空结果。这是因为按 hardware_id 划分的特定组的表中的行有一行的名称没有出现在自定义列表中。
我需要在 Entity Framework 或 Linq 中进行查询。非常感谢。
【问题讨论】:
标签: sql entity-framework linq group-by entity-framework-4