我有一个现有的应用程序将文本文件转换为DataSet,而不是传递给另一个方法进行处理。到目前为止,文本文件一直是1个位置(内部客户端引用)。
客户端现在具有包含多个位置的第二种文件格式。我想从这个新文件中获取返回的数据集,并根据文件中的Location字段将其转换为数据集数组。这将允许我们利用接受单个位置的数据集的现有方法。
.Net中是否有内置方法允许我将DataSet拆分为多个数据集,或者我是否必须自己创建此逻辑?
答案 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);
}
请注意,我假设该位置是该行中的第一个字段,请相应更改。