c# - 是否有一种简单的 LINQ 方法可以按月份对列表进行排序?

标签 c# linq

假设我们有一个像这样的简单模型,其中一列是“月份”,是一个三字母字符串。

public class SampleModel
{            
    public int ID { get; set; }
    public string Column1 { get; set; }
    public string Month { get; set; }
    public string Column2 { get; set; }
}

如果我们想按月对模型进行排序,像这样的 LINQ 语句

query.OrderBy(m =>m.Month)

会产生以下字母排序,因为 Month 是一个字符串。

有没有一种简单的方法可以按时间顺序对 Month 进行排序?

Sample table

最佳答案

您可以通过将数据存储在查找表/字典或与此相关的枚举中来实现。如果您使用的是 LINQ to Objects,而不是任何基于 LINQ 的奇特表达式,则此方法有效。

Dictionary<string, int> months = new Dictionary<string, int>();
months.Add("Jan", 0);
// and so on

query.OrderBy(m => months[m.Month]);

此解决方案适用于其他类型的数据,而不仅仅是月份。

关于c# - 是否有一种简单的 LINQ 方法可以按月份对列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38106130/

相关文章:

c# - SonarQube C#分析失败 'Not a Valid Line Offset for Pointer'

c# - 如何从通知中心更新/删除通知?

c# - 作为模拟 IQueryable 的 Provider 放什么

linq - 扩展方法转换为 LINQ 表达式和常用方法

asp.net-mvc-3 - Dynamic LINQ 是否仍在使用并适用于缩小搜索结果?

c# - 在 OrderedDictionary 上使用 linq 以使用 GridView 获取最大值

c# - SFTP Renci.SshNet 使用现有名称上传文件 - 追加还是引发异常?

c# - 在 ASP.NET MVC 中存储来自 3 DropDownListFor(日、月、年)的 DateTime

c# - 命名空间中不存在类型或命名空间名称 'Linq'

c# - 针对慢速分组的 LINQ 查询优化