繁体   English   中英

从更大的数据表中提取数据表的最快方法?

[英]Fastest way to extract DataTable from bigger DataTable?

假设我在这个结构中有一张桌子

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

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

您应该使用DataView.RowFilter()快速获取它。 请参考DataTable.Select()与DataView.RowFilter()性能测试-筛选行

使用一个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

尝试这个:

string expression = "Id = yourId";
DataRow[] foundRows = originalTable.Select(expression);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM