【问题标题】:C# Sort data table descending by a few columns when there is empty cellsC#当有空单元格时按几列降序对数据表进行排序
【发布时间】:2020-11-29 11:47:57
【问题描述】:

我有两个 (int) 列的表:countSelectedglobalCount。我想先按countSelected 降序排列表格,然后按globalSelected 降序排列。 我试过了:

DataTable dt = myTable;
if (dt.Rows.Count > 0)
{
    dt = dt.AsEnumerable().OrderByDescending(x => x.Field<int>("countSelected")).ThenByDescending(x => x.Field<int>("GlobalCount"))
           .Select(x => x)
           .CopyToDataTable();
} 

但它是bad:"System.InvalidCastException"。也许是因为一些单元格是空的。 我该如何解决这个问题?

【问题讨论】:

  • 您确定数据类型吗?尝试添加“?”在 int 之后。您也可以检查 DBNull.value。
  • 你尝试过像“Int.Parse(x.countSelected)”这样的简单转换吗?
  • 如果您的 DataTable 用作某些控件的 DataSource:myTable.DefaultView.Sort = "countSelected DESC, GlobalCount DESC";。控件使用 DataTable.DefaultView 作为数据源,因此数据将显示为已排序(而 DataTable 的行顺序保持不变)。如果没有绑定,又想生成一个新的DataTable,那么Sortvar dt = myTable.DefaultView.ToTable();。如果您的 DataTable 已绑定,我建议使用 BindingSource 作为 DataSource mediator 对象,并使用其 Sort 方法对数据进行排序。
  • 谢谢!你的回答我成功了!

标签: c# linq datatable


【解决方案1】:

这两列有不同的大小写样式是否正确?你确定它们是可空的 32 位整数吗?

然后试试这个:

DataTable dt = myTable;
if (dt.Rows.Count > 0)
{
    dt = dt.AsEnumerable()
           .OrderByDescending(x => x.Field<int?>("countSelected"))
           .ThenByDescending(x => x.Field<int?>("GlobalCount"))
           .Select(x => x)
           .CopyToDataTable();
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 2018-05-21
    • 2022-01-06
    相关资源
    最近更新 更多