如何在加载 XML 文件时在 where 中使用 Fun<XELEMENT,bool>
How to use Fun<XELEMENT,bool> in where when loadin XML file
我做了下面的例子
IEnumerable<string> names = from student in XDocument.Load(@"E:\Data.xml").Element("Students").Elements("Student").Where(i=>(int)i.Element("TotalMarks") > 800)
orderby (int)student.Element("TotalMarks") descending
select student.Element("Name").Value;
foreach (string name in names)
{
Console.WriteLine(name);
}
此示例只是从本地 HD 加载 xml 文档。我通过使用属于 Elements 的 where 扩展方法过滤了结果,我通过 lambda 表达式实现了过滤器。现在请任何人帮助我如何获得相同的结果但使用 Func(<'XELEMENT,bool'> predicate) option 。
顺便说一句,这段代码在控制台应用程序上工作,您可以将鼠标悬停在上面的位置,并以清晰的方式查看 Func。
这是 xml 文件的名称 Data.xml
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!--Creating an XML Tree using LINQ to XML-->
<Students>
<Student Id="101">
<Name>Mark</Name>
<Gender>Male</Gender>
<TotalMarks>800</TotalMarks>
</Student>
<Student Id="102">
<Name>Rosy</Name>
<Gender>Female</Gender>
<TotalMarks>900</TotalMarks>
</Student>
<Student Id="103">
<Name>Pam</Name>
<Gender>Female</Gender>
<TotalMarks>850</TotalMarks>
</Student>
<Student Id="104">
<Name>John</Name>
<Gender>Male</Gender>
<TotalMarks>950</TotalMarks>
</Student>
</Students>
如果您希望使用单独的函数而不是内联 lambda,这里是:
private bool MyFilter(XElement elt)
{
return (int)elt.Element("TotalMarks") > 800;
}
// then in your query ... Where(i=>MyFilter(i)) ...
我做了下面的例子
IEnumerable<string> names = from student in XDocument.Load(@"E:\Data.xml").Element("Students").Elements("Student").Where(i=>(int)i.Element("TotalMarks") > 800)
orderby (int)student.Element("TotalMarks") descending
select student.Element("Name").Value;
foreach (string name in names)
{
Console.WriteLine(name);
}
此示例只是从本地 HD 加载 xml 文档。我通过使用属于 Elements 的 where 扩展方法过滤了结果,我通过 lambda 表达式实现了过滤器。现在请任何人帮助我如何获得相同的结果但使用 Func(<'XELEMENT,bool'> predicate) option 。 顺便说一句,这段代码在控制台应用程序上工作,您可以将鼠标悬停在上面的位置,并以清晰的方式查看 Func。 这是 xml 文件的名称 Data.xml
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!--Creating an XML Tree using LINQ to XML-->
<Students>
<Student Id="101">
<Name>Mark</Name>
<Gender>Male</Gender>
<TotalMarks>800</TotalMarks>
</Student>
<Student Id="102">
<Name>Rosy</Name>
<Gender>Female</Gender>
<TotalMarks>900</TotalMarks>
</Student>
<Student Id="103">
<Name>Pam</Name>
<Gender>Female</Gender>
<TotalMarks>850</TotalMarks>
</Student>
<Student Id="104">
<Name>John</Name>
<Gender>Male</Gender>
<TotalMarks>950</TotalMarks>
</Student>
</Students>
如果您希望使用单独的函数而不是内联 lambda,这里是:
private bool MyFilter(XElement elt)
{
return (int)elt.Element("TotalMarks") > 800;
}
// then in your query ... Where(i=>MyFilter(i)) ...