2011-08-26 74 views
1

我是linq的新手,我发现有很多不同的方法来构建查询。我想发布这个来显示我目前正在使用的代码并尝试解决两个问题。Linq到选项的XML动态排序

  1. 能够动态传递ASC /降序

    一个。在某些情况下,我希望能够在不同的递增/递减顺序对各属性进行排序

  2. 能够通过参数

    一中的顺序数动态传递。在下面的代码中,我为每个要订购的项目传递多个属性。显然,我宁愿传入一个集合,然后让代码根据该集合构建订单。我可以传入收藏集,但我不确定如何从该集合中构建订单。

    b。我也认为排序类型会在某个时候发挥作用,所以我不确定我怎么能够知道如何动态投射?

感谢您的任何意见。

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 
+0

这个动态排序的原因究竟是什么?它只是你的程序的不同部分需要不同的排序?或者你是否从用户那里得到所需的分类?如果是这样的话,你或你可以从用户那里获得什么样的表单? – svick

+0

应用程序的不同部分需要不同的排序。我使用第三方程序集来返回信息,并且需要根据需求对信息进行排序,然后将其发送到View。 – dwhittenburg

回答

0

在你的情况下,最好的选择是:做到这一点。当你有收集并且在编译时知道所需的顺序,只需使用LINQ来订购它。我认为,你不能做得更好,你将不得不以某种方式表达顺序,而LINQ也是如此舒适。

+0

听起来不错。谢谢。我目前正在为每个必须返回的XML创建一个排序函数。我只是想整合这些函数以便能够传入xml以及排序并允许排序。 – dwhittenburg