我有以下xml文件
<?xml version="1.0" encoding="utf-8"?>
<Users>
<User>
<Name>John Smith</Name>
<test>
<Date>23.05.2011</Date>
<points>33</points>
</test>
<test>
<Date>22.06.2011</Date>
<points>29</points>
</test>
</User>
</Users>
Run Code Online (Sandbox Code Playgroud)
我想使用linq来提取用户名是"John Smith"的测试的日期和点数.
我将如何构建我的linq?
我做了以下,但没有按我的意愿工作:
XElement main = XElement.Load(@"users.xml");
string t = "John Smith";
var v = from user in main.Elements("User")
where t == users.Element("Name").Value
select users;
MessageBox.Show(v.First().Element("Date").Value.ToString());
Run Code Online (Sandbox Code Playgroud)
我不确定你希望输出的格式是什么,但这个示例代码应该得到日期和点.这会将结果投影为匿名类型:
class Program
{
static void Main(string[] args)
{
XElement main = XElement.Load(@"users.xml");
var results = main.Descendants("User")
.Descendants("Name")
.Where(e => e.Value == "John Smith")
.Select(e => e.Parent)
.Descendants("test")
.Select(e => new { date = e.Descendants("Date").FirstOrDefault().Value, points = e.Descendants("points").FirstOrDefault().Value });
foreach (var result in results)
Console.WriteLine("{0}, {1}", result.date, result.points);
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
输出是:
23.05.2011, 33
22.06.2011, 29
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19087 次 |
最近记录: |