C# — Как использовать динамический linq для создания запросов linq to XML

У меня есть требование, согласно которому пользователи будут предоставлять условные операторы в виде строки из пользовательского интерфейса, которую я должен включить в свои запросы LINQ to XML. Я ссылался на этот сайт для динамических запросов linq, но он указывает только LINQ to SQL, а не LINQ to XML, что мне и нужно.

https://weblogs.asp.net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library

Я попытался отредактировать это, чтобы оно соответствовало моим требованиям, но, похоже, это не работает.

    string xml = @"
               <Results>
                    <Result>
                        <Name>John</Name>
                        <Phone>110</Phone>
                        <Location>USA</Location>
                    </Result>
                    <Result>
                        <Name>Mary</Name>
                        <Phone>120</Phone>
                        <Location>UK</Location>
                    </Result>
                    <Result>
                        <Name>John</Name>
                        <Phone>130</Phone>
                        <Location>Canada</Location>
                    </Result>
              </Results>
       ";

        XElement results = XElement.Parse(xml);
        var query = results.Elements("Result")
                           .AsQueryable().
                           .OrderBy("Element(XName.Get(\"Name\")).Value 
                            ascending, Element(XName.Get(\"Phone\")).Value ascending");


        foreach (var i in query)
        {
            Console.WriteLine(i);
        }

Когда этот код запускается, я получаю сообщение об ошибке

System.Linq.Dynamic.ParseException' occurred in System.Linq.Dynamic.dll 
Additional information: No property or field XName' exists in type 'XElement'

Есть идеи, как это исправить?


person codeJam    schedule 30.06.2017    source источник
comment
Я пытаюсь выполнить динамический запрос LINQ. Я хочу, чтобы оператор внутри предложения where был взят из пользовательского ввода. Оператор будет передан в виде строки.   -  person codeJam    schedule 06.07.2017


Ответы (1)


XElement results = XElement.Parse(xml);
var query = results.Elements("Result").AsQueryable().OrderBy(x=>x.Element("Name").Value).ThenBy(x=>x.Element("Phone").Value);

Свободный синтаксис и синтаксис запросов — разные вещи, не путайте их.

person Nico    schedule 30.06.2017
comment
Я пытаюсь выполнить динамический запрос LINQ. Я хочу, чтобы оператор внутри предложения where был взят из пользовательского ввода. Оператор будет передан в виде строки. - person codeJam; 06.07.2017