C#LINQ无法更新数据表值



我试图使用LINQ在xml文件中查找数据,但我的ANY((或WHERE子句找不到数据。我的方法有什么问题还不清楚。

我有一个xml文件,它是由Dataset WriteXml((函数创建的。通过这种方式,我通过LINQ查询xml数据,并且出现未找到的数据。

查看我的XML结构

<?xml version="1.0" standalone="yes"?>
<TER_ViewAll>
<dgvViewAll_Vertical>
<Section_x0020_>ML</Section_x0020_>
<LineItem>BofA Merrill Lynch</LineItem>
<Revise_x0020_Date>01-16-2018</Revise_x0020_Date>
<_x0032_010_x0020_FYA>1608.6500</_x0032_010_x0020_FYA>
<_x0032_011_x0020_FYA>1429.0610</_x0032_011_x0020_FYA>
<_x0032_012_x0020_FYA>1656.7500</_x0032_012_x0020_FYA>
<_x0032_013_x0020_FYA>1427.9330</_x0032_013_x0020_FYA>
<_x0031_Q_x0020_2014A>321.0100</_x0031_Q_x0020_2014A>
<_x0032_Q_x0020_2014A>525.5670</_x0032_Q_x0020_2014A>
<_x0033_Q_x0020_2014A>478.0100</_x0033_Q_x0020_2014A>
<_x0034_Q_x0020_2014A>323.2360</_x0034_Q_x0020_2014A>
<_x0032_014_x0020_FYA>1647.8230</_x0032_014_x0020_FYA>
<_x0031_Q_x0020_2015A>342.4010</_x0031_Q_x0020_2015A>
<_x0032_Q_x0020_2015A>512.7390</_x0032_Q_x0020_2015A>
<_x0033_Q_x0020_2015A>465.9940</_x0033_Q_x0020_2015A>
<_x0034_Q_x0020_2015A>318.4440</_x0034_Q_x0020_2015A>
<_x0032_015_x0020_FYA>1639.5780</_x0032_015_x0020_FYA>
<_x0031_Q_x0020_2016A>430.9940</_x0031_Q_x0020_2016A>
<_x0032_Q_x0020_2016A>531.7920</_x0032_Q_x0020_2016A>
<_x0033_Q_x0020_2016A>410.4750</_x0033_Q_x0020_2016A>
<_x0034_Q_x0020_2016A>379.9890</_x0034_Q_x0020_2016A>
<_x0032_016_x0020_FYA>1753.2500</_x0032_016_x0020_FYA>
<_x0031_Q_x0020_2017A>456.9130</_x0031_Q_x0020_2017A>
<_x0032_Q_x0020_2017A>696.9010</_x0032_Q_x0020_2017A>
<_x0033_Q_x0020_2017A>503.3780</_x0033_Q_x0020_2017A>
<_x0034_Q_x0020_2017A />
<_x0032_017_x0020_FYA />
<_x0031_Q_x0020_2018A />
<_x0032_Q_x0020_2018A />
<_x0033_Q_x0020_2018A />
<_x0034_Q_x0020_2018A />
<_x0032_018_x0020_FYA />
<_x0031_Q_x0020_2019A />
<_x0032_Q_x0020_2019A />
<_x0033_Q_x0020_2019A />
<_x0034_Q_x0020_2019A />
<_x0032_019_x0020_FYA />
<_x0031_Q_x0020_2020A />
<_x0032_Q_x0020_2020A />
<_x0033_Q_x0020_2020A />
<_x0034_Q_x0020_2020A />
<_x0032_020_x0020_FYA />
<_x0031_Q_x0020_2021E />
<_x0032_Q_x0020_2021E />
<_x0033_Q_x0020_2021E />
<_x0034_Q_x0020_2021E />
<_x0032_021_x0020_FYE />
<_x0031_Q_x0020_2022E />
<_x0032_Q_x0020_2022E />
<_x0033_Q_x0020_2022E />
<_x0034_Q_x0020_2022E />
<_x0032_022_x0020_FYE />
<GroupKey>Consensus Model~Net Revenue~TRIN~NBM~~1~ML</GroupKey>
</dgvViewAll_Vertical>
</TER_ViewAll>

上面的xml是一个记录示例,我的xml文件有许多类似上面的记录。我通过DataSet加载xml文件,并通过LINQ进行查询。我这样问。

private void button1_Click(object sender, EventArgs e)
{
string QCViewPath_savepath = @"C:Test.xml";
DataSet ds = new DataSet();
ds.ReadXml(QCViewPath_savepath);
if (ds.Tables[0].AsEnumerable().Any(a => a.Field<string>("Section ") == "ML"
&& a.Field<string>("GroupKey").Contains("Consensus Model")
&& a.Field<string>("GroupKey").Contains("Net Revenue")
&& a.Field<string>("GroupKey").Contains("NBM")
&& a.Field<string>("GroupKey").Contains("1")
&& a.Field<string>("GroupKey").Contains("ML")
))
{
//ds.Tables[0].AsEnumerable().Where(a => a.Field<string>("Section ") == "ML"
//     && a.Field<string>("GroupKey").Split('~')[0].Trim() == "Consensus Model"
//     && a.Field<string>("GroupKey").Split('~')[1].Trim() == "Net Revenue"
//     && a.Field<string>("GroupKey").Split('~')[3].Trim() == "NBM"
//     && a.Field<string>("GroupKey").Split('~')[4].Trim() == "1"
//     && a.Field<string>("GroupKey").Split('~')[5].Trim() == "ML"
//     ).ToList<DataRow>()
//     .ForEach(r =>
//     {
//         r["2010 FYA"] = 1200;
//     });
var rowsToUpdat = ds.Tables[0].AsEnumerable().Where(a => /*a.Field<string>("Section ") == "ML"
&&*/ a.Field<string>("GroupKey").Split('~')[0].Trim() == "Consensus Model"
&& a.Field<string>("GroupKey").Split('~')[1].Trim() == "Net Revenue"
&& a.Field<string>("GroupKey").Split('~')[3].Trim() == "NBM"
&& a.Field<string>("GroupKey").Split('~')[4].Trim() == "1"
&& a.Field<string>("GroupKey").Split('~')[5].Trim() == "ML"
);
foreach (var row in rowsToUpdat)
{
row.SetField("2010 FYA", "1200");
//row.SetField("enddate", enDate);
}
}
}

我的目标是更新数据表的周期值,并在所有更新后最终保存该数据。在LINQ查询后,我在检查rowsToUpdat枚举没有结果时收到此消息请帮助更正代码。感谢

是问题已修复。共享工作代码。

string QCViewPath_savepath = @"C:Test.xml";
DataSet ds = new DataSet();
ds.ReadXml(QCViewPath_savepath);
if (ds.Tables[0].AsEnumerable().Any(a => a.Field<string>("Section ") == "ML"
&& a.Field<string>("GroupKey").Split('~')[0].Trim() == "Consensus Model"
&& a.Field<string>("GroupKey").Split('~')[1].Trim() == "Net Revenue"
&& a.Field<string>("GroupKey").Split('~')[3].Trim() == "NBM"
&& a.Field<string>("GroupKey").Split('~')[5].Trim() == "1"
&& a.Field<string>("GroupKey").Split('~')[6].Trim() == "ML"
))
{
ds.Tables[0].AsEnumerable().Where(a => a.Field<string>("Section ") == "ML"
&& a.Field<string>("GroupKey").Split('~')[0].Trim() == "Consensus Model"
&& a.Field<string>("GroupKey").Split('~')[1].Trim() == "Net Revenue"
&& a.Field<string>("GroupKey").Split('~')[3].Trim() == "NBM"
&& a.Field<string>("GroupKey").Split('~')[5].Trim() == "1"
&& a.Field<string>("GroupKey").Split('~')[6].Trim() == "ML"
).ToList<DataRow>()
.ForEach(r =>
{
r["2010 FYA"] = 1200;
});
//foreach (var row in rowsToUpdat)
//{
//    row.SetField("2010 FYA", "1200");
//}
}

最新更新