将C#数据集拆分为多个数据集

时间:2014-05-26 14:18:34

标签: .net dataset

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

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

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

1 个答案:

答案 0 :(得分:0)

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

因此,您已经提到位置字段是关键字,每个唯一的位置都应该让它自己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);

现在,您只需循环播放群组并填充DataTable中的单个DataSet即可。您可以使用DataSet.Clone,这样您只需要定义一次架构:

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);
}

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