【问题标题】:DataTable - Dynamic Linq OrderBy using Lambda expressionsDataTable - 动态 Linq OrderBy 使用 Lambda 表达式
【发布时间】:2014-09-26 09:04:19
【问题描述】:

我在 DataTable 中获取记录集合并将其绑定到网格控件。在绑定它之前,我根据几个条件对数据进行排序。为简洁起见,我将解释一个测试场景。

我有两个字段类别和国家。我想首先根据类别对记录进行排序,然后再按国家/地区对记录进行排序。但这里的问题是我想将所有空类别值推到最后,然后根据字母顺序进行排序。

为此我正在做 -

var rows = dt.AsEnumerable()
        .OrderBy(r => string.IsNullOrEmpty(Convert.ToString(r["Category"]))) //push empty values to bottom
        .ThenBy(r => Convert.ToString(r["Category"]))
        .ThenBy(r => Convert.ToString(r["Country"]))

但是现在,我需要排序的字段是动态的,我在数组中拥有。

如何使用 lambda 表达式根据字段动态排序记录? (将空值推到最后)

【问题讨论】:

    标签: c# .net linq dynamic-linq


    【解决方案1】:

    我假设你所说的数组是一个字符串数组。

    var columns = new string[] { "Category", "Country" };
    
    var rows = dt.AsEnumerable().OrderBy(x => 0);
    foreach(var columnName in columns)
    {
        rows = rows.ThenBy(r => string.IsNullOrEmpty(Convert.ToString(r[category])))
                   .ThenBy(r => Convert.ToString(r[category]));
    }
    

    因为 LINQ 使用延迟执行,所以在您真正需要结果之前不会评估您的查询。这就是为什么您可以像上面的示例那样通过多个步骤构建它。

    【讨论】:

    • 完美。我已经尝试过了,但由于某种原因,我在 ThenBy 附近遇到了语法错误。现在好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多