Dataview.RowFilter - 如何获取特定的结果集

时间:2012-10-04 15:06:40

标签: c# linq asp.net-3.5

我有一个包含两列的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列表返回的,但这也是可以协商的。

提前致谢!

1 个答案:

答案 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>();