0

この構造にテーブルがあるとしましょう

Id | Name | Product
-------------------
1   Name1   Product1
1   Name1   Product2
2   Name3   Product3
3   Name4   Product4

テーブルは、それを返す sql クエリで Id によって並べ替えられます。ここで、一意の ID ごとに指定された行を含む DataTable を抽出します。これは、上記の例を使用すると、ID 値が異なる行を含む 3 つの DataTable を取得する必要があることを意味します。

4

4 に答える 4

1

高速に取得するには、DataView.RowFilter() を使用する必要があります。DataTable.Select() 対 DataView.RowFilter() パフォーマンス テスト – 行のフィルタリングを参照してください。

于 2013-10-11T09:33:14.070 に答える
1

DataView を使用します。

var view = new System.Data.DataView(table);
view.Sort = "id";

foreach(var id in new [] {1,2,3})
{
    view.RowFilter = "id = " + id.ToString();
    var result = view.ToTable();
}
于 2013-10-11T09:33:21.453 に答える
1

以下のようなものlinqこれを達成しようとすることができます(これは決して試行およびテストされていません):datatable

var groupedResults= from r in dataTable.AsEnumerable()
                  group r by r.Field<string>("Id") into g
                  select new
                  {
                      Id = g.Key,
                      Name = g.Min(),
                      Product = g.Count()
                  };

最も効率的な方法は、おそらくデータテーブルの前に直接 SQL を使用することです。

SELECT Id, Name, MIN(Product)
FROM [Your_Table]
GROUP BY Id, Name

このサンプルは最初のProduct.

Productsを取得するCountには、次のようにします。

SELECT Id, Name, COUNT(Product)
FROM [Your_Table]
GROUP BY Id, Name
于 2013-10-11T09:40:25.790 に答える