Linq to XML динамический порядок по параметрам - PullRequest
1 голос
/ 26 августа 2011

Я новичок в linq и нашел много разных способов построения запросов. Я хотел опубликовать это, чтобы показать код, с которым я сейчас работаю, и попытаться решить две проблемы.

  1. Возможность динамического перехода в asc / desc

    а. В некоторых случаях я хочу иметь возможность сортировать каждый атрибут в различном порядке asc / desc

  2. Уметь динамически передавать номер заказа по параметрам

    а. В приведенном ниже коде я передаю несколько атрибутов для каждого элемента, по которому я хочу заказать. Очевидно, что я предпочел бы передать коллекцию, а затем позволить коду построить порядок на основе этой коллекции. Я могу передать коллекцию, но я не уверен, каким образом я построю заказ из этой коллекции.

    б. Я также думаю, что в какой-то момент в игру вступит тип сортировки, поэтому я не уверен, как я смогу узнать, как динамически разыгрывать?

Спасибо за любой вклад.

    Private Function XMLSort(ByVal xOldDom As XmlDocument, ByVal sChildNodeName As String, ByVal sOrderByAttributeName1 As String, ByVal sOrderByAttributeName2 As String, ByVal sOrderByAttributeName3 As String) As IEnumerable(Of XElement)
         Dim xOldDocument As New XDocument
         xOldDocument = XDocument.Parse(xOldDom.OuterXml)

         Dim oQuery As IEnumerable(Of XElement)
         oQuery = From xNode In xOldDocument.Descendants(sChildNodeName) _
                  Order By CInt(xNode.Attribute(sOrderByAttributeName1)), CInt(xNode.Attribute(sOrderByAttributeName2)), CStr(xNode.Attribute(sOrderByAttributeName3)) _
                  Select xNode

         Return oQuery
    End Function

1 Ответ

0 голосов
/ 26 августа 2011

В вашем случае лучшим вариантом будет: просто сделайте это. Если у вас есть коллекция и вы знаете требуемый порядок во время компиляции, просто используйте LINQ для ее заказа. Я думаю, вы не можете сделать намного лучше, вам придется каким-то образом выразить заказ, а LINQ настолько удобен, насколько это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...