DataTable Custom LINQ OrderBy

本文关键字:OrderBy LINQ Custom DataTable | 更新日期: 2023-09-27 18:22:03

我一直得到对象没有设置为对象的实例,我不知道为什么。

SortColumn数据类型string数据:"123|bob",DBNull。Value,"234|sam","345|jim"

到目前为止,我有这个:

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

DataTable Custom LINQ OrderBy

我相信Field<>扩展方法为您处理DBNull,所以您只需检查空值(更多信息):

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

附带说明一下,您可以通过先选择所有列值,然后进行拆分来避免双字段访问:

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