0

假设我在这个结构中有一个表

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

该表在返回它的 sql 查询中按 Id 排序。现在,我想提取包含每个唯一 ID 的指定行的 DataTable。这意味着使用上面的示例,我应该得到三个 DataTables,其中包含具有不同 Id 值的行。

4

4 回答 4

1

您应该使用 DataView.RowFilter() 来快速获得它。请参考DataTable.Select() Vs DataView.RowFilter() 性能测试 - 过滤行

于 2013-10-11T09:33:14.070 回答
1

使用数据视图。

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.

要获得Count产品,请执行以下操作:

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

尝试这个:

string expression = "Id = yourId";
DataRow[] foundRows = originalTable.Select(expression);
于 2013-10-11T09:27:50.157 回答