按数字或字母顺序排序多值数据-LINQ到SQL和C#3
我在为LINQ谓词提供按字母或数字排序所需的知识时遇到了一个问题 我正在使用具有可排序列的多值数据透视集。该列始终作为varchar存储在数据库中,但是,它具有该数据类型的实际查找知识。为了简化,除了字符串之外,列还可以包含整数 我编写了一个通用(和工作)排序谓词,如下所示按数字或字母顺序排序多值数据-LINQ到SQL和C#3,c#,sql,linq,orm,sorting,C#,Sql,Linq,Orm,Sorting,我在为LINQ谓词提供按字母或数字排序所需的知识时遇到了一个问题 我正在使用具有可排序列的多值数据透视集。该列始终作为varchar存储在数据库中,但是,它具有该数据类型的实际查找知识。为了简化,除了字符串之外,列还可以包含整数 我编写了一个通用(和工作)排序谓词,如下所示 Func<MyObject, string> sortClause = p => p.MyObjectProperties.Find(s => s.Name == theSortProperty).V
Func<MyObject, string> sortClause = p => p.MyObjectProperties.Find(s => s.Name == theSortProperty).Value;
Func-sortClause=p=>p.MyObjectProperties.Find(s=>s.Name==theSortProperty).Value;
问题是,如果我的可排序列包含数值(作为varchar存储在数据库中),我会得到
13
131实现这一点的一种方法是用零填充字符串数值,直到可以出现的最宽值的长度,然后根据填充值进行排序:
string s = "131";
s = s.PadLeft(8, '0');
您可以在LINQ查询中使用一些System.Convert函数。如果您将orderby更改为System.Convert.ToInt32(),您应该能够按数字排序,而不是按字典排序。将“编造”的多值标记替换为c#以便于回答我也想到了类似的问题,但如何将其应用于上面显示的排序谓词?我需要为谓词填充.Value,但我无法理解语法是如何工作的。好的,现在我得到了:Func sortClause=p=>p.MyObjectProperties.Find(s=>s.Name==theSortProperty.Value.ToString().PadLeft(8,'0');谢谢
string s = "131";
s = s.PadLeft(8, '0');