【问题标题】:Order by not working for more than 10 items订购不超过 10 件商品
【发布时间】:2010-10-09 13:52:28
【问题描述】:

我正在尝试使用以下代码使用 linq 查询对 xml 进行排序

Dim SortedFields = From field In feedXML.Descendants("fields")
Dim sFieldList = From field In SortedFields.Descendants("field") Order By field.@position

xml 如下所示,但问题是它按以下顺序排序 1,10,11,12,13,14...19,2,3,4,5,6,7 而不是 1,2,3,4,5....10,11,12,.....19。

谁能帮我按正确的顺序排序?

<fields>
    <field position="'6'" tablename="Students" headername="6" fieldreference="ClientField1" orderbydirection="ASC" displaycolumn="T" />
    <field position="'7'" tablename="Students" headername="7" fieldreference="ClientField2" orderbydirection="ASC" displaycolumn="T" />
    <field position="'8'" tablename="Students" headername="8" fieldreference="ClientField3" orderbydirection="ASC" displaycolumn="T" />
    <field position="'9'" tablename="Students" headername="9" fieldreference="ClientField4" orderbydirection="ASC" displaycolumn="T" />
    <field position="'10'" tablename="Students" headername="10" fieldreference="ClientField5" orderbydirection="ASC" displaycolumn="T" />
    <field position="'1'" tablename="Students" headername="1" fieldreference="ClientField6" orderbydirection="ASC" displaycolumn="T" />
    <field position="'2'" tablename="Students" headername="2" fieldreference="ClientField7" orderbydirection="ASC" displaycolumn="T" />
    <field position="'3'" tablename="Students" headername="3" fieldreference="ClientField8" orderbydirection="ASC" displaycolumn="T" />
    <field position="'4'" tablename="Students" headername="4" fieldreference="ClientField9" orderbydirection="ASC" displaycolumn="T" />
    <field position="'5'" tablename="Students" headername="5" fieldreference="ClientField10" orderbydirection="ASC" displaycolumn="T" />
    <field position="'11'" tablename="Students" headername="11" fieldreference="ClientField11" orderbydirection="ASC" displaycolumn="T" />
    <field position="'12'" tablename="Students" headername="12" fieldreference="ClientField12" orderbydirection="ASC" displaycolumn="T" />
    <field position="'13'" tablename="Students" headername="13" fieldreference="ClientField13" orderbydirection="ASC" displaycolumn="T" />
    <field position="'14'" tablename="Students" headername="14" fieldreference="ClientField14" orderbydirection="ASC" displaycolumn="T" />
    <field position="'15'" tablename="Students" headername="15" fieldreference="ClientField15" orderbydirection="ASC" displaycolumn="T" />
    <field position="'16'" tablename="Students" headername="16" fieldreference="ClientField16" orderbydirection="ASC" displaycolumn="T" />
    <field position="'17'" tablename="Students" headername="17" fieldreference="ClientField17" orderbydirection="ASC" displaycolumn="T" />
    <field position="'18'" tablename="Students" headername="18" fieldreference="ClientField18" orderbydirection="ASC" displaycolumn="T" />
    <field position="'19'" tablename="Students" headername="19" fieldreference="ClientField19" orderbydirection="ASC" displaycolumn="T" />
</fields>

【问题讨论】:

  • 这是字母顺序,不是数字顺序。
  • 我还建议将问题的标题更改为不那么具有误导性/耸人听闻的内容:)

标签: xml vb.net sorting


【解决方案1】:

正如 Paul Tomblin 指出的,这是按字母顺序排列的。如果位置将始终是一个数字,那么您可以使用 (int?) 将其转换为整数

Dim SortedFields = From field In feedXML.Descendants("fields")
                            Dim sFieldList = From field In SortedFields.Descendants("field") Order By (int?)field.@position

【讨论】:

  • 你真的可以像在VB中那样进行转换吗?
  • Order By Integer.Parse(field.@position) 是正确的表达方式..再次感谢!
  • DirectCast() 或 CInt() 将是更直接的翻译:它们是运算符,但 Integer.Parse() 是函数调用。
【解决方案2】:

它按字母顺序排序。您需要在 Order By 子句中将 position 属性转换为整数:

Dim SortedFields = From field In feedXML.Descendants("fields")
Dim sFieldList = From field In SortedFields.Descendants("field") _
    Order By CType(field.@position, Integer)

(抱歉,如果有更好的转换可用...这是XAttribute conversion operator page 建议的代码)

【讨论】:

    猜你喜欢
    • 2011-05-07
    • 2020-07-15
    • 2019-05-29
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    相关资源
    最近更新 更多