【问题标题】:How to sort by order of the weekdays (as in a calendar week) instead of alphabetical order (in C#)?如何按工作日的顺序(如日历周)而不是字母顺序(在 C# 中)排序?
【发布时间】:2010-12-19 17:18:58
【问题描述】:

我无法弄清楚如何按天对 XML 文件中的查询输出进行排序,该日期是 xml 文件中的一个值。

我的意思是它会按当天的第一个字母排序,因此它将在星期五作为第一个字母返回(因为其中有“F”)。但这不是我想要的,而是应该按工作日的顺序排序,即周一、周二、周三、周四、周五。

有什么方法可以转换包含文本中日期的字符串,例如。 “星期一”到要排序的日期时间?

我使用的代码是这样的:

 let obv = (string)query.Element("day")
 orderby obv 
 select new obv 

【问题讨论】:

    标签: c# silverlight xaml windows-phone-7


    【解决方案1】:

    您可以按CultureInfo.CurrentCulture.DateFormat.DayNames 数组中值的索引进行排序:

    var daynames = Array.ConvertAll(
        CultureInfo.CurrentCulture.DateFormat.DayNames,
        d => d.ToUpperInvariant()
    );
    
    from ...
    let obv = (string)query.Element("day")
    orderby Array.IndexOf(daynames, obv.ToUpperInvariant())
    select new obv 
    

    【讨论】:

    • OP 需要按天数排序,而不是按字母顺序。
    • @Oded:我很清楚这一点。这就是IndexOf 所做的。
    • 感谢您的快速回复。我不确定 WP7 是否支持 Array.ConvertAll。我应该添加一个命名空间吗?
    • @Jamie:这是核心 System.Array 类的一部分。它可以在任何地方工作。
    • @SLaks -“System.Array”不包含“ConvertAll”的定义
    【解决方案2】:

    这允许您按一周中的任意一天进行排序:

    public class DayOfWeekComparer : IComparer<DayOfWeek>
    {
        public static int Rank(DayOfWeek firstDayOfWeek, DayOfWeek x)
        {
            return (int)x + (x < firstDayOfWeek ? 7 : 0);
        }
    
        public static int Compare(DayOfWeek firstDayOfWeek, DayOfWeek x, DayOfWeek y)
        {
            return Rank(firstDayOfWeek, x).CompareTo(Rank(firstDayOfWeek, y));
        }
    
        DayOfWeek firstDayOfWeek;
    
        public DayOfWeekComparer(DayOfWeek firstDayOfWeek)
        {
            this.firstDayOfWeek = firstDayOfWeek;
        }
    
        public int Compare(DayOfWeek x, DayOfWeek y)
        {
            return DayOfWeekComparer.Compare(this.firstDayOfWeek, x, y);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-06-20
      • 2020-07-05
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 2019-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多