代码之家  ›  专栏  ›  技术社区  ›  Ash Machine

按数字或字母顺序排序多值数据-LINQ到SQL和C#3

  •  1
  • Ash Machine  · 技术社区  · 16 年前

    我在为LINQ谓词提供按字母或数字排序所需的知识时遇到了一个问题。

    我正在使用具有可排序列的多值数据透视集。该列始终作为varchar存储在数据库中,但是,它具有该数据类型的实际查找知识。为了简化,除了字符串之外,列还可以包含整数。

    我编写了一个通用(和工作)排序谓词,如下所示。

    Func<MyObject, string> sortClause = p => p.MyObjectProperties.Find(s => s.Name == theSortProperty).Value;
    

    13
    131   <-- 131 between 13 and 14!!!
    14
    15 
    

    当然,这是正确的。

    正如我所说,我通过编程知道SortProperty的数据类型(字符串或整数)。我希望能够指示谓词使用字母或数字方式进行排序。我看不到实现这一点的简单方法,因为我的LINQ到SQL映射将该列声明为[column(Storage=“\u Value”,DbType=“NVarChar(MAX)”,UpdateCheck=UpdateCheck.Never)]

    但我相信一定有人以前见过这一点,并能提出建议。我应该提到,NHibernate或其他ORM对我来说是不可能的……谢谢

    2 回复  |  直到 16 年前
        1
  •  0
  •   Mitch Wheat    16 年前

    string s = "131";
    s =  s.PadLeft(8, '0');
    
        2
  •  0
  •   Jim Halpert Jim Halpert    16 年前

    您可以在LINQ查询中使用一些System.Convert函数。如果将orderby更改为System.Convert.ToInt32(),则应该能够按数字排序,而不是按字典排序。