c# - 如何按 2 列对 DataTable 进行排序,使用 NULL,也许使用 LINQ?

标签 c# linq

我有一个 ADO.Net datatable我需要先按 column1 然后按 column2 排序,其中任何一个都可能有空值。排序后,我需要从行中读取一些值并添加到 ListView 中。
我已经编写了代码来执行此 DataTable.DefaultView.Sort(运行两次)。但想知道是否有更好的方法。
我在想也许是LINQ ...所以我尝试了:

OrderedEnumerableRowCollection<DataRow> queryX = dt.AsEnumerable()
            .OrderBy(c => c.Field<int?>("column1"))
            .ThenBy(c => c.Field<int?>("column2"));
            
但是这个错误 "System.InvalidCastException was unhandled" .我假设这是由 NULL 引起的,所以就像我在数据表 "where column1 IS NOT NULL" 上指定查询一样作为测试。并且错误仍然发生。
我真的没有太多 LINQ 经验,所以我的问题是:
  • 我上面的代码有什么问题?从概念上讲,我错过了 LINQ 的工作原理?
  • 为什么过滤掉 Null 仍然会导致这种情况?同样,从概念上讲,我遗漏了一些关于 LINQ 如何工作的内容
  • 是否有更好的\正确的 LINQ 查询可以解决这个问题?
  • 有没有更好\正确(更优雅)的方法来做到这一点(使用或不使用 LINQ)?

  • 泰普

    最佳答案

    如果您有 DataTable,请查看 DataView :

    private void SortByTwoColumns()
    {
        // Get the DefaultViewManager of a DataTable.
        DataView view = DataTable1.DefaultView;
    
        // By default, the first column sorted ascending.
        view.Sort = "State, ZipCode DESC";
    }
    

    来源:
    http://msdn.microsoft.com/en-us/library/system.data.dataview.sort.aspx

    关于c# - 如何按 2 列对 DataTable 进行排序,使用 NULL,也许使用 LINQ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1651263/

    相关文章:

    c# - 使用 Linq 查找列表子集中的下一个元素

    linq - 整理冲突

    c# - Rest API 设计(twitter)

    c# - 具有非标准命名约定的数据库的 POCO 别名

    c# - 从 NodeJS 验证 "Owin OAuth Bearer Token"

    c# - 使用结构从C#中的方法返回成功/失败,错误消息和插入的ID的优点

    c# - 有条件的 Linq 外连接

    c# - 使用 LINQ 查询/子查询多个方法(Quartz.NET 组、作业和触发器的示例)

    C# linq Groupby 查询忽略Where on bool

    c# - 有没有办法使用 LINQ 根据封闭条件(即不是简单的 WHERE 子句)选择一系列项目?