从更大的数据表中提取数据表的最快方法
本文关键字:数据表 方法 提取 | 更新日期: 2023-09-27 18:34:57
假设我在这个结构中有一个表
Id | Name | Product
-------------------
1 Name1 Product1
1 Name1 Product2
2 Name3 Product3
3 Name4 Product4
该表在返回它的 sql 查询中按 Id 排序。现在,我想提取包含每个唯一 id 的指定行的数据表。这意味着使用上面的例子,我应该得到三个包含具有不同 Id 值的行的数据表。
使用 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();
}
您可以尝试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
您应该使用 DataView.RowFilter(( 来快速获取它。请参考 DataTable.Select(( vs DataView.RowFilter(( 性能测试 – 过滤行
试试这个:
string expression = "Id = yourId";
DataRow[] foundRows = originalTable.Select(expression);