设想:
- 模块 1 有标签 AB
- 模块 2 有标签 AB
- 模块 3 有标签 A
- 模块 4 有标签 B
- 模块 5 有标签 ABC
在表中:
ModuleId TagId
1 A
1 B
2 A
2 B
3 A
4 B
5 A
5 B
5 C
健康)状况:
- 我有 TagId ex 的列表: List<> tagList = { A, B }
- 我希望所有这些 TagIds 都属于同一个 ModuleId,而不是 TagIds 列表(即 tagList)。因此,它应该返回 TagId C。
TSQL 语句 -
select TagId
from Table
where ModuleId in (
select ModuleId
from Table
where TagId in(A,B)
group by ModuleId having count(ModuleId) = 2 )
and TagId not in (A,B)
LINQ 语句 -
List<int?> temp = (from t1 in context.Table
where tagList.Contains(t1.TagId)
group t1 by t1.ModuleId into grouped
where grouped.Count() == tagList.Count()
select grouped.Key).ToList();
var result = (from t2 in context.Table
where temp.Contains(t2.ModuleId) && !tagList.Contains(t2.TagId)
select t2).Distinct().ToList();
所以我的问题是——
- 这种情况下的最佳方法应该是什么?
- 如果有更好的方法,那么它的 LINQ 方法语法是什么?
提前致谢。