C# 使用dataset.readxml在datatables中定义嵌套关系
我想使用dataset.readXML(文件名)将xml读入数据集 其思想是加载这两个表,然后使用LINQ连接它们并将查询结果转储到sql数据库中 我有以下xmlC# 使用dataset.readxml在datatables中定义嵌套关系,c#,xml,datatable,C#,Xml,Datatable,我想使用dataset.readXML(文件名)将xml读入数据集 其思想是加载这两个表,然后使用LINQ连接它们并将查询结果转储到sql数据库中 我有以下xml <Report> <Parameters> <Code>ABC</Code> <Expiries> <date>2000-01-01</date> <time
<Report>
<Parameters>
<Code>ABC</Code>
<Expiries>
<date>2000-01-01</date>
<time>08:00:00</time>
<reason>The guy liked cake</reason>
</Expiries>
<Expiries>
<date>2002-01-01</date>
<time>08:00:00</time>
<reason>The guy still liked cake</reason>
</Expiries>
</Parameters>
<Parameters>
<Code>BCA</Code>
<Expiries>
<date>2000-01-01</date>
<time>08:00:00</time>
<reason>The guy liked cake</reason>
</Expiries>
<Expiries>
<date>2002-01-01</date>
<time>08:00:00</time>
<reason>The guy still liked cake</reason>
</Expiries>
</Parameters>
</Report>
我对datatable的定义如下:(addcolumn是一种添加列的方便方法)
这一切都非常有效,但它抛弃了我的到期日和参数之间的关系。
如果我不使用定义的列,它会自动在两个表之间创建一个关系
DataSet tds = new DataSet()
tds.ReadXML(file.FullName)
//now a record on tds.tables["Parameters"] will have Code="ABC", Parameter_Id=0
如何在datatable定义中定义此关系,以便它模仿自动生成的模式?假设代码是唯一的,您可以执行以下操作:
DataSet tds = new DataSet()
tds.Tables.add(Parameters);
tds.Tables.add(Expiries);
tds.ReadXML(file.FullName)
//now a record on tds.tables["Parameters"] will have Code="ABC"
DataSet custom = new DataSet();
DataTable Parameters = new DataTable("Parameters")
.AddColumn<string>("Code");
DataTable Expiries = new DataTable("Expiries")
.AddColumn<string>("Code")
.AddColumn<string>("date")
.AddColumn<string>("time")
.AddColumn<string>("reason");
custom.Tables.Add(Parameters);
custom.Tables.Add(Expiries);
custom.Relations.Add(new DataRelation("ParameterExpiries", Parameters.Columns["Code"], Expiries.Columns["Code"]));
custom.Relations["ParameterExpiries"].Nested = true;
DataSet custom=新数据集();
数据表参数=新数据表(“参数”)
.AddColumn(“代码”);
DataTable Expiries=新数据表(“Expiries”)
.AddColumn(“代码”)
.AddColumn(“日期”)
.AddColumn(“时间”)
.AddColumn(“原因”);
自定义.Tables.Add(参数);
自定义.Tables.Add(过期);
custom.Relations.Add(新的数据关系(“ParameterExpries”,Parameters.Columns[“Code”],Expires.Columns[“Code”]);
custom.Relations[“ParameterExpries”].Nested=true;
这将为您提供一个expires表,其中包含从父级定义的代码
如果代码不是唯一的,那么您可以在参数中创建另一列,该列为AutoIncrement=true(例如“ID”),并在父子关系中使用它。然后在expires“Code”中添加另一列,该列使用表达式“Parent.Code”
DataSet custom=新数据集();
数据表参数=新数据表(“参数”)
.AddColumn(“代码”)
.AddColumn(“ID”);
Parameters.Columns[“ID”]。AutoIncrement=true;
DataTable Expiries=新数据表(“Expiries”)
.AddColumn(“ID”)
.AddColumn(“代码”)
.AddColumn(“日期”)
.AddColumn(“时间”)
.AddColumn(“原因”);
自定义.Tables.Add(参数);
自定义.Tables.Add(过期);
添加(新的DataRelation(“ParameterExpries”,Parameters.Columns[“ID”],Expireies.Columns[“ID”]);
custom.Relations[“ParameterExpries”].Nested=true;
expireies.Columns[“Code”].Expression=“Parent.Code”;
有关表达式,请参见:
有关datarelation,请参见:是否尝试创建2个表一个仅包含代码列(参数表),另一个包含日期、时间和原因列(到期表)。尝试进行内部联接(因此输出为1个表)
DataSet custom = new DataSet();
DataTable Parameters = new DataTable("Parameters")
.AddColumn<string>("Code");
DataTable Expiries = new DataTable("Expiries")
.AddColumn<string>("Code")
.AddColumn<string>("date")
.AddColumn<string>("time")
.AddColumn<string>("reason");
custom.Tables.Add(Parameters);
custom.Tables.Add(Expiries);
custom.Relations.Add(new DataRelation("ParameterExpiries", Parameters.Columns["Code"], Expiries.Columns["Code"]));
custom.Relations["ParameterExpiries"].Nested = true;
DataSet custom = new DataSet();
DataTable Parameters = new DataTable("Parameters")
.AddColumn<string>("Code")
.AddColumn<int>("ID");
Parameters.Columns["ID"].AutoIncrement = true;
DataTable Expiries = new DataTable("Expiries")
.AddColumn<int>("ID")
.AddColumn<string>("Code")
.AddColumn<string>("date")
.AddColumn<string>("time")
.AddColumn<string>("reason");
custom.Tables.Add(Parameters);
custom.Tables.Add(Expiries);
custom.Relations.Add(new DataRelation("ParameterExpiries", Parameters.Columns["ID"], Expiries.Columns["ID"]));
custom.Relations["ParameterExpiries"].Nested = true;
Expiries.Columns["Code"].Expression = "Parent.Code";