【问题标题】:Split C# dataset into multiple datasets将 C# 数据集拆分为多个数据集
【发布时间】:2014-05-26 14:18:33
【问题描述】:

我有一个现有的应用程序,它将文本文件转换为 DataSet,然后将其传递给另一个方法进行处理。到目前为止,文本文件一直是 1 个位置(内部客户参考)。

客户端现在具有包含多个位置的第二种文件格式。我想从这个新文件中获取返回的数据集,并根据文件中的 Location 字段将其转换为数据集数组。这将允许我们利用现有方法接受单个位置的数据集。

.Net 中是否有允许我将 DataSet 拆分为多个数据集的内置方法,还是我必须自己创建这个逻辑?

【问题讨论】:

  • 您知道DataSet 只是一个或多个DataTables 的容器吗?因此,您可以将另一个表添加到DataSet。除此之外,您应该添加更多上下文或代码,否则很难提供比一般语句更多的内容。
  • 嗨,蒂姆,我知道一个数据集包含 1 个或多个数据表。在这种情况下,我试图将一个带有 1 个表的数据集,并将其拆分为带有 1 个表的多个数据集。这种方法的唯一原因是现有方法已经使用传递的 Dataset 对象,因此不需要更多编码。

标签: .net dataset


【解决方案1】:

不,没有内置方法,您的要求非常模糊。但我会试着给你一个想法。

所以您已经提到位置字段是关键,每个唯一位置都应该拥有自己的DataSet。然后你应该填写List<DataSet>。您可以使用 LINQ 从文件中读取所有行并按其分组:

List<DataSet> dataSets = new List<DataSet>();
DataSet datasetSample = new DataSet();
// add table(s) with columns here
char separator = '\t';  // replace with actual separator
var locationGroups = File.ReadLines("Path")
    .Select(l => new { arr = l.Split(separator), line = l })
    .Select(x => new { x.arr, x.line, location =  x.arr[0].Trim() }) 
    .GroupBy(x => x.location);

现在您只需要循环组并在DataSet 中填充单个DataTable。你可以使用DataSet.Clone,这样你只需要定义一次schema:

foreach (var locationgroup in locationGroups)
{ 
    DataSet ds = datasetSample.Clone(); // clones only table-schemata, no data
    DataTable tbl = ds.Tables[0]; // you've mentioned that there is just one table
    foreach (var location in locationgroup)
    {
        tbl.Rows.Add(location.arr);
    }
    dataSets.Add(ds);
}

请注意,我假设位置是该行中的第一个字段,请相应地更改它。

【讨论】:

  • Tim,感谢您推荐这种方法,因为它会完美运行。我什至不知道 LINQ 可以从文件中读取,因为我只将它与数据库一起使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-23
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多