2012-02-01 80 views
1

我不断收到对象未设置为对象的实例,我不知道为什么。DataTable自定义LINQ OrderBy

SortColumn数据类型的字符串数据: “123 |鲍勃”,DBNull.Value, “234 |山姆”, “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; 
} 

基本上想在之前对零件进行排序|按升序(CopyToDataTable()返回排序表)

回答

2

相信Field<>扩展方法处理DBNull你,所以你可以检查空值(more information):

... o.Field<object>(sortColumn) == null ? 99999 ... 

在一个侧面说明,您可以通过先选择所有列值来避免双字段访问,然后再进行拆分:

table 
    .AsEnumerable() 
    .Select(row => row.Field<string>(sortColumn)) 
    .OrderBy(value => value == null ? 99999 : Convert.ToInt32(value.Split('|').First())); 
+0

非常好。我会试试看。 – 2012-02-01 14:47:35