我有一个包含两列的DataTable,这两列都是ID的列表,具有很多关系:
ResourceID AttributeID ---------- ----------- 1 1 1 2 1 3 2 1 2 3 3 3
等...
给定一个AttributeID列表,我想获得一个资源ID列表,其中包含 ALL 提供的AttributeID。
我最初想过这样做:
string[] attributes = "....";
dv.RowFilter = "AttributeID in (" + String.Join(",", attributes) + ")";
return dv.ToTable(true, "ResourceID").AsEnumerable().Select(x => (int)x[0]).ToList();
但是这给了我一个列表,其中包含所提供的AttributeID的 ANY 。
我的属性列表当前是一个字符串数组,但必要时可以更改。我的结果集当前是作为ResourceID列表返回的,但这也是可以协商的。
提前致谢!
答案 0 :(得分:0)
对于任何想要做同样事情的人来说,这是我找到的解决方案 - 基本上是对我的结果集进行分组并计算每个组中的项目数,以检查它是否与我提供的属性列表中的项目数相匹配
dv.RowFilter = "AttributeID in (" + String.Join(",", attributes) + ")";
List<int> Resources = (from a in dv.ToTable().AsEnumerable()
group a by (int)a["ResourceID"] into grp
where grp.Count() == attributes.Length
select grp.Key).ToList<int>();