繁体   English   中英

按数字或字母顺序对MultiValue数据进行排序-LINQ to SQL和C#3

[英]Sorting MultiValue data numerically OR alphabetically - LINQ to SQL and C#3

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

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

我写了一个通用(和有效的)排序谓词,如下所示。

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

问题是,如果我的可排序列包含数值(在数据库中存储为varchar),我将得到

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

当然,从数字上看这是正确的。

如我所说,我以编程方式知道theSortProperty的数据类型(字符串或整数)。 我希望能够指示谓词使用字母均值或数字均值进行排序。 我看不到实现此目的的简便方法,因为我的LINQ到SQL的映射将该列声明为[Column(Storage =“ _ Value”,DbType =“ NVarChar(MAX)”,UpdateCheck = UpdateCheck.Never)]

但是,我敢肯定有人一定曾经看过这个,可以提出建议。 我应该提到NHibernate或其他ORM对我来说是不可能的.....谢谢

实现此目的的一种方法是用零填充字符串数字值,直到可能出现的最大值的长度,然后对填充值进行排序:

string s = "131";
s =  s.PadLeft(8, '0');

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM