Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按数字或字母顺序排序多值数据-LINQ到SQL和C#3_C#_Sql_Linq_Orm_Sorting - Fatal编程技术网

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

按数字或字母顺序排序多值数据-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

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

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

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

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');