2016-06-10 1 views
0

я пример нижеКак использовать Fun <XElement, BOOL> в том, где, когда loadin XML файл

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); 
     } 

этот пример просто загрузить XML-документ с локального HD. Я отфильтровал результат, используя метод расширения, принадлежащий Elements, я применил фильтр с помощью лямбда-выражения. теперь, пожалуйста, кто-нибудь может мне помочь, как добиться тех же результатов, но использовать Func (< «XELEMENT, bool '> предикат). , кстати, этот код работает на консольном приложении, вы можете навешиваться над ним и видеть 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> 

ответ

1

Если это отдельная функция, которую вы хотите использовать вместо встроенного лямбда, здесь:

private bool MyFilter(XElement elt) 
{ 
    return (int)elt.Element("TotalMarks") > 800; 
} 

// then in your query ... Where(i=>MyFilter(i)) ... 
+0

MyFilter является более универсальным, если Предельное значение является параметром. –

Смежные вопросы