【问题标题】:Orderby not ordering strings that include numbers in LinqOrderby 不对 Linq 中包含数字的字符串进行排序
【发布时间】:2012-05-26 14:20:36
【问题描述】:

我在数据库中有一个字符串字段,将数字保存为字符串。当我想根据 Linq 中的此字段进行订购时,如下所示,但 orderby 效果不佳。它的顺序是这样的

1 - 2 - 3 - 25 - 11 - 30 - 50 ===> 1 - 11 - 2 - 25 - 3 - 30 - 50

   IQueryable<Tbl_Melk> Melks =
   from melk in Tbl_Melk
   where melk.Mantaghe == Mantaghe && melk.Hoze == Hoze && melk.Block == Block
   orderby melk.Melk
   select melk;

【问题讨论】:

    标签: linq entity-framework linq-to-sql iqueryable


    【解决方案1】:

    莫里斯说的对,你可以试试这个:

    var Melks = from melk in Tbl_Melk.ToList()
    let integer = int.Parse(melk)
    orderby integer
    where melk.Mantaghe == Mantaghe && melk.Hoze == Hoze && melk.Block == Block
    orderby melk.Melk
    select melk;
    

    但是这样你就会失去性能和 IQuerable 接口。

    【讨论】:

    • tnx 但它有 error: LINQ to Entities does not identify the method 'Int32 Parse(System.String)' 方法,并且此方法无法转换为存储表达式.
    • Ups,Linq 正在尝试将其转换为 sql 语句,我将添加一个解决方法,但效率较低。
    • 以防万一在那里发布的解决方案Linq - Order by number then letters 也在程序中进行排序。
    • 如果您需要在数据库引擎中进行排序,您可以考虑更改您的设计。 'Melk' 列的类型应该是数字 (int)。
    【解决方案2】:

    实际上,这是正确的顺序,因为它按字母顺序对值进行排序。除非您将数据强制转换为数字类型,否则 LINQ 无法判断数据是否包含数字。查看这个问题,了解一种按您想要的方式排序的方法。

    Linq - Order by number then letters

    【讨论】:

      【解决方案3】:

      LeftPad 用零填充字符串。

      出于我的想法,缺少不支持 LeftPad 的 EntityFramework:

      ....
      orderby SqlFunctions.Replicate("0", 10 - melk.Melk.Length) + melk.Melk
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-18
        • 2016-10-28
        • 2019-05-11
        • 1970-01-01
        • 1970-01-01
        • 2021-08-12
        相关资源
        最近更新 更多