0
我是一个linq的新手,并且在这个问题上停留了几天。下面是我的例子的xml。将两个Linq查询数据放入两个单独的数据列
<
<ItemGroupData ItemGroupOID="IG_TABLE_MODALITYTABLE" ItemGroupRepeatKey="1" TransactionType="Insert">
<ItemData ItemOID="I_TABLE_MODAL_DATE_TABLE" Value="2014-05-01" />
<ItemData ItemOID="I_TABLE_MODAL_TYPE_TABLE" Value="1" />
</ItemGroupData>
<ItemGroupData ItemGroupOID="IG_TABLE_MODALITYTABLE" ItemGroupRepeatKey="2" TransactionType="Insert">
<ItemData ItemOID="I_TABLE_MODAL_DATE_TABLE" Value="2014-05-02" />
<ItemData ItemOID="I_TABLE_MODAL_TYPE_TABLE" Value="2" />
</ItemGroupData>
我试图做到的,是分化的ItemData为日期和类型,然后放入已创建一个数据表列。以下是我目前的尝试,它只连接行而不是将数据放入两个创建的列中。非常感谢你的帮助。任何意见是极大的赞赏。干杯。
DataTable modDt = new DataTable();
modDt.Columns.Add(new DataColumn("Date", typeof(string)));
modDt.Columns.Add(new DataColumn("Type", typeof(string))); //changed to string?
var document = XDocument.Load("doc.xml");
XNamespace nsSys = "http://www.cdisc.org/ns/odm/v1.3";
//Get nodes separated by inner child element
var values = document.Descendants(nsSys + "ItemData")
.Where(t => t.Attribute("ItemOID").Value == "I_TABLE_MODAL_DATE_TABLE")
.Select(x => x.Attribute("Value").Value);
foreach (var item in values)
{
modDt.Rows.Add(DateTime.ParseExact(item, "yyyy-MM-dd", CultureInfo.InvariantCulture).ToString("MM/dd/yy"),null);
}
var typevalues = document.Descendants(nsSys + "ItemData")
.Where(t => t.Attribute("ItemOID").Value == "I_TABLE_MODAL_TYPE_TABLE")
.Select(x => x.Attribute("Value").Value);
foreach (var item in typevalues)
{
modDt.Rows.Add(null ,int.Parse(item));
}
foreach (DataRow row in modDt.Rows)
{
string sessionDate = row["Date"].ToString();
string mod = row["Type"].ToString();
string xnatCli = mod + sessionDate;
Console.Write(xnatCli);
}
Console.Read();
为您的解决方案欢呼。这是一个非常好的解决方案。然而我得到的日期稍微偏离。它给了我。 01/05/2014 00:00:00和02/05/2014 00:00:00。我想得到05/01/14和02/05/14。干杯。 – user3276191
C#不只有日期类型。它始终是DateTime。如果你只想要日期部分,你可以通过执行date.ToShortDateString()将它转换为一个字符串。 – CharlesNRice