c# - 按我们想要的特定顺序对 DataTable 的行进行排序
问题描述
考虑我有两列的 DataTable
第 1 列 | 第 2 列 |
---|---|
美国广播公司 | 一月 |
定义 | 十二月 |
中央银行 | 二月 |
bdf | 十一月 |
啊啊啊 | 十二月 |
我有第 2 列的月份列表。我想根据月份对其进行排序
输出:
第 1 列 | 第 2 列 |
---|---|
定义 | 十二月 |
啊啊啊 | 十二月 |
bdf | 十一月 |
中央银行 | 二月 |
美国广播公司 | 一月 |
我尝试了什么:
string[] monthList = { "dec", "nov", "oct", "sep",,,, "feb", "jan"};
DataTable dataExistingTable
DataTable temp = new DataTable();
foreach(string month in monthList)
{
var filteredData = dataExistingTable.AsEnumerable().Where(x => x["Column2"] == month);
temp.Merge(filteredData.CopyToDataTable());
}
请提出一些更快/更好的方法!!!
解决方案
添加基于表达式的列
dataExistingTable.Columns.Add("MonthNumber", typeof(int),
"IIF ([Column2] = 'dec', 12, (IIF ([Column2] = 'nov', 11, (IIF ([Column2] = 'oct', 10, (IIF ([Column2] = 'sep', 9, 8)))))))");
然后对基于表达式的列应用排序
dataExistingTable.DefaultView.Sort = "MonthNumber desc";
然后表的 DefaultView 会给你排序的行。
// dataExistingTable.DefaultView;
推荐阅读
- date - 如果在某个日期之后 - 过滤器列表
- sh - 等效于 sh 中的双括号
- r - 将矩阵中的值复制到 r 中的另一个位置
- bash - Docker,CentOS:如何在 bash shell 中使用环境模块自动加载模块?
- python - 如何将来自 url 的音频流直播到传出的 twilio 电话中?
- macos - Vulkan macOS 实例无法加载
- python - 使用 spotipy 在烧瓶会话中存储 Spotify 令牌?
- sql-server - 如何在使用 OPENJSON WITH 时执行字符串函数?
- symlink - WSL:使用 Windows 中的 WSL 符号链接文件夹
- python-3.x - 如何让我的程序知道并响应按下的键