Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.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/8/linq/3.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
C# DataTable自定义LINQ OrderBy_C#_Linq_Sorting_.net 4.0_Datatable - Fatal编程技术网

C# DataTable自定义LINQ OrderBy

C# DataTable自定义LINQ OrderBy,c#,linq,sorting,.net-4.0,datatable,C#,Linq,Sorting,.net 4.0,Datatable,我总是让对象没有设置为对象的实例,我不知道为什么 SortColumn数据类型字符串数据:“123|bob”,DBNull.Value,“234|sam”, “345 |吉姆” 到目前为止,我有: table = table.AsEnumerable().OrderBy( o => o.Field<object>(sortColumn) == DBNull.Value ? 99999 : o.Field<string>(sortColum

我总是让对象没有设置为对象的实例,我不知道为什么

SortColumn数据类型字符串数据:“123|bob”,DBNull.Value,“234|sam”, “345 |吉姆”

到目前为止,我有:

table = table.AsEnumerable().OrderBy(
   o => o.Field<object>(sortColumn) == 
          DBNull.Value ? 99999 : o.Field<string>(sortColumn).Split('|')[0].TryParse(0)
          ).CopyToDataTable();

public static int TryParse(this string input, int valueIfNotConverted)
{
    int value;
    if (Int32.TryParse(input, out value))
    {
        return value;
    }
    return valueIfNotConverted;
}
table=table.AsEnumerable().OrderBy(
o=>o.Field(sortColumn)=
DBNull.Value?99999:o.Field(sortColumn).Split(“|”)[0].TryParse(0)
).CopyToDataTable();
公共静态int-TryParse(此字符串输入,int-valueIfNotConverted)
{
int值;
if(Int32.TryParse(输入,输出值))
{
返回值;
}
返回值如果未转换;
}
基本上,我们希望先对部分进行升序排序(
CopyToDataTable()
返回已排序的表)

我相信
字段
扩展方法可以为您处理
DBNull
,因此您只需检查null值():

。。。o、 字段(sortColumn)=空?99999 ...
另一方面,通过先选择所有列值,然后进行拆分,可以避免双字段访问:

table
    .AsEnumerable()
    .Select(row => row.Field<string>(sortColumn))
    .OrderBy(value => value == null ? 99999 : Convert.ToInt32(value.Split('|').First()));
表格
.可计算的()
.Select(行=>row.Field(sortColumn))
.OrderBy(value=>value==null?99999:Convert.ToInt32(value.Split(“|”).First());
table
    .AsEnumerable()
    .Select(row => row.Field<string>(sortColumn))
    .OrderBy(value => value == null ? 99999 : Convert.ToInt32(value.Split('|').First()));