【问题标题】:DataTable Custom LINQ OrderByDataTable 自定义 LINQ OrderBy
【发布时间】:2012-02-01 14:37:04
【问题描述】:

我不断收到未设置为对象实例的对象,但我不知道为什么。

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

【问题讨论】:

    标签: c# linq sorting .net-4.0 datatable


    【解决方案1】:

    我相信Field&lt;&gt; 扩展方法会为您处理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()));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多