首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataTable -使用Lambda表达式的动态Linq OrderBy

问DataTable -使用Lambda表达式的动态Linq OrderBy
EN

Stack Overflow用户
提问于 2014-09-25 23:46:49
回答 1查看 2K关注 0票数 0

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

我有两个领域类别和国家。我想先根据类别对记录进行排序,然后再按国家进行排序。但这里的问题是,我想把所有的空类别值推到末尾,然后根据字母顺序进行排序。

我要做的是-

代码语言:javascript
复制
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表达式根据字段对记录进行动态排序?(将空值推到末尾)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-26 01:04:19

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

代码语言:javascript
复制
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使用延迟执行,所以在实际需要结果之前不会对查询进行评估。这就是为什么您可以在多个步骤中构建它,如上面的示例所示。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26049911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档