gpt4 book ai didi

c# - 根据C#中的日期从Xml中过滤数据

转载 作者:数据小太阳 更新时间:2023-10-29 02:36:31 25 4
gpt4 key购买 nike

我需要帮助根据日期过滤 xml 文件,我拥有的这部分代码只根据用户名和地点打印出所有平均信息

        Runner run = new Runner();
string filePath = "runners.xml"; //path
XDocument xDoc = XDocument.Load(filePath);
string userSelect = name;



var averageAddDistancequery = xDoc.Descendants("User").Where(w => (string)w.Element("Name") == user).Select(s => new
{
add = s.Elements("Attempts").Where(w => (string)w.Element("Place").Value == "Paris").Select(t => t.Element("Distance").Value)
}).ToList();

if (averageAddDistancequery[0].add.Count() > 0)
{
var aa = averageAddDistancequery[0].add.Average(a => float.Parse(a));
run.averageDistance = aa.ToString();
}
else
{
// nothing
}

var averageAdd2Distancequery = xDoc.Descendants("User").Where(w => (string)w.Element("Name") == userSelector).Select(s => new
{
add = s.Elements("Attempts").Where(w => (string)w.Element("Place").Value == "Madrid").Select(t => t.Element("Distance").Value)
}).ToList();

if (averageAdd2Distancequery[0].add.Count() > 0)
{
var aa = averageAdd2DistanceSubquery[0].add.Average(a => float.Parse(a));
run.averageDistance2 = aa.ToString();
}
else
{
// nothing
}



xmlDoc.DocumentElement.SetAttribute("searching", user);
XmlNodeList tests = xmlDoc.SelectNodes("//User[Name =/*/@searching]/Attempts");
listBox1.Items.Clear();
listBox1.Items.Add("Runners Name: " + user);
listBox1.Items.Add("Overall Distance in Paris: " + run.averageAdd);
listBox1.Items.Add("Overall Distance in Madrid: " + run.averageSub);

例如,如果我的 xml 文件如下所示

    Users>
<User>
<Name>David</Name>
<Attempts>
<Place>Paris</Place>
<Date>3/29/2012</Date>
<Distance>100</Distance>
</Attempts>
<Attempts>
<Place>Madrid</Place>
<Date>7/28/2012</Date>
<Distance>100</Distance>
</Attempts>
<Attempts>
<Place>Paris</Place>
<Date>8/19/2012</Date>
<Distance>60</Distance>
</Attempts>
<Attempts>
<Place>Madrid</Place>
<Date>9/29/2012</Date>
<Distance>200</Distance>
</Attempts>
</User>
<User>
<Name>Lenny</Name>
<Attempts>
<Place>Paris</Place>
<Date>9/29/2012</Date>
<Distance>130</Distance>
</Attempts>
</User>
</Users>

如果我为 david 运行代码,它会打印出类似这样的内容

用户:大卫

巴黎的平均距离://数据

马德里的平均距离://数据

这不是我想要的,我想要的是从文本框中选择任意两个日期并仅显示这两个日期之间的信息例如,如果我选择 david,从日期 3/29/2012 到 8/29/2012

我想输出这样的东西:

用户:大卫

巴黎从 2012 年 3 月 29 日到 2012 年 8 月 29 日的平均距离://数据

2012 年 3 月 29 日至 2012 年 8 月 29 日马德里的平均距离://数据

我已经尝试了几个小时,我需要帮助来实现这一点

最佳答案

使用 LINQ to XML,这里假设您从 TextBox 中选择了两个日期:

var userElement = xDox.Descendants("User")
.SingleOrDefault(u => u.Element("Name").Value == "David");

if (userElement != null)
{
var result = userElement.Descendants("Attempts")
.Select(a => new
{
Place = a.Element("Place").Value,
Date = DateTime.Parse(a.Element("Date").Value),
Distance = int.Parse(a.Element("Distance").Value)
})

.Where(a => a.Date >= DateTime.Parse("3/29/2012")
&& a.Date <= DateTime.Parse("8/29/2012"))

.GroupBy(a => a.Place)
.Select(g => new {Place = g.Key, Avg = g.Average(x => x.Distance)});
}

关于c# - 根据C#中的日期从Xml中过滤数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12684213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com