我有2个强类型的数据集。我需要将包含的数据保存到单个文件中(当然,以后也可以读取并将它们加载回数据集中。)。通常,当我只有一个数据集时,我会使用DataSet.WriteXml()
方法将数据保存为文本,并使用DataSet.ReadXml()
来读取数据。
想到的第一个想法是将每个数据集保存到Memory Stream中,然后将流转换为字节数组,然后将字节写入文件中。
但是这个主意在我看来不是很优雅或最好,所以我想知道是否有更好的方法来做。
有什么想法吗?(编码答案会更有帮助)
答案 0 :(得分:0)
DataSet类具有一个Merge method。目的是用于架构相似/相关并将其组合在一起的数据集对象。 many parameters可以控制您希望此合并的工作方式。
合并示例
MethodError: no method matching constructvariable!(::Model, ::getfield(JuMP, Symbol("#_error#107")){Tuple{Symbol,Expr}}, ::Array{Float64,1}, ::Array{Float64,1}, ::Symbol, ::String, ::Float64)
Closest candidates are:
constructvariable!(::Model, ::Function, !Matched::Number, !Matched::Number, ::Symbol, ::AbstractString, ::Number; extra_kwargs...) at /home/lhk/.julia/packages/JuMP/Xvn0n/src/macros.jl:968
constructvariable!(::Model, ::Function, !Matched::Number, !Matched::Number, ::Symbol, !Matched::Number, !Matched::Array{T,1} where T, !Matched::Array{Float64,1}, !Matched::AbstractString, !Matched::Number; extra_kwargs...) at /home/lhk/.julia/packages/JuMP/Xvn0n/src/macros.jl:961
Stacktrace:
[1] top-level scope at /home/lhk/.julia/packages/JuMP/Xvn0n/src/macros.jl:1259
[2] top-level scope at In[18]:7
我们还有很多事情要做,但是根据您的问题,似乎Merge似乎并不能完全满足您的需求(因此在评论中提出了我的问题),并且缺乏理解为什么需要一个xml文件和/或原始数据集的生成方式(例如,从控件外部的两个外部xml文件中生成文件。....
想法2
如果两个数据集表示完全不同的内容,则将另一个表添加到一个数据集中,然后保存。当您读回它时,您将颠倒整个过程,将表拆分为第二个数据集。
添加表格的示例
dataset1.Merge(dataset2,true); //true will preserve changes in dataset1 if dataset2 has matching/related data that is different
使用Tables选项读取xml后返回两个数据集的样子:
dataset1.Tables.Add(dataset2.Tables["tablename"]);
答案 1 :(得分:0)
以下是我用LINQPad编写的一些测试代码,它们用于将BinaryFormatter
用于多个DataSet
:
var fsw = new FileStream(@"D:\testdataset.ser", FileMode.Create);
var b = new BinaryFormatter();
b.Serialize(fsw,ds);
b.Serialize(fsw,ds2);
fsw.Close();
var fsr = new FileStream(@"D:\testdataset.ser", FileMode.Open);
var rds = (DataSet)b.Deserialize(fsr);
var rds2 = (DataSet)b.Deserialize(fsr);
fsr.Close();