DataTable自定义LINQ OrderBy

时间:2012-02-01 14:37:05

标签: 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>(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()返回已排序的表)

1 个答案:

答案 0 :(得分: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()));