0

2つの列を含むDataTableがあり、どちらもIDのリストであり、多くの関係があります。

  ResourceID AttributeID
  ---------- -----------
  1 1
  1 2
  1 3
  2 1
  2 3
  3 3

等...

AttributeIDのリストが与えられたので、提供されたすべてのAttributeIDを持つResourceIDのリストを取得したいと思います。

私は最初にこれを行うことを考えました:

    string[] attributes = "....";
    dv.RowFilter = "AttributeID in (" + String.Join(",", attributes) + ")";

    return dv.ToTable(true, "ResourceID").AsEnumerable().Select(x => (int)x[0]).ToList();

しかし、それは私に提供されたAttributeIDのいずれかを持つリストを与えます。

私の属性リストは現在文字列配列ですが、必要に応じて変更できます。私の結果セットは現在、ResourceIDのリストとして返されますが、それも交渉可能です。

前もって感謝します!

4

1 に答える 1

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>();
于 2012-10-05T12:18:55.367 に答える