[英]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.