c# - 在 LINQ OrderBY 中排除一个值

标签 c# .net linq sql-order-by

我有一个列表,我希望它按 DayOfWeek 排序,但 DayOfWeek=1 的情况除外,它应该放在列表的末尾。 我尝试了 OrderBy 和 ThenBy 的一些变体,但它似乎继续按数字顺序排序。

我确信这很简单,我不想更改 Day=1 的值,这是原始解决方案

var dayOfWeeksHolder = Enumerable.Range(1, 7);   
var defaultTime = DateTime.Today.TimeOfDay;
var psList = _pickingScheduleIO.GetDayScheduleList(branchNo);
var psListByType = psList.Where(p => p.PickingSesstionTypeId == pickingSessionTypeId).ToList();

var fullList = (from d in dayOfWeeksHolder
                join s in psListByType on d equals s.DayOfWeek into grp
                from ds in grp.DefaultIfEmpty()
                // where (ds == null || ds.PickingSesstionTypeId == pickingSessionTypeId)
                select new DayScheduleVM
                {
                    PickingScheduleId = ds == null ? 0 : ds.PickingSessionScheduleId,
                    DayOfWeek = d, //d == 1 ? d + 7 : d, //in sql sunday is 1, we need to make it to 8 so it will be sorted to last
                    StartTime = ds == null ? defaultTime : ds.StartTime,
                    EndTime = ds == null ? defaultTime : ds.EndTime,
                    PickingSessionTypeId = pickingSessionTypeId
                }).OrderBy(a => a.DayOfWeek !=1).ThenBy(a => a.DayOfWeek);
return fullList.ToList();

最佳答案

由于您使用的条件,您得到了数字排序的印象,正是 a => a.DayOfWeek != 1。它会将所有非星期日 (true) 放在星期日之后 (false),这是 OrderBy 排序 boolean< 的方式 值。

试试:

  • .OrderByDescending(a => a.DayofWeek != 1).ThenBy(a => a.DayofWeek)
  • .OrderBy(a => a.DayofWeek == 1).ThenBy(a => a.DayofWeek)

关于c# - 在 LINQ OrderBY 中排除一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17516529/

相关文章:

c# - 我如何允许在 VS2010 中中断 'System.NullReferenceException'?

c# - ServiceStack.Redis 服务可用性

c# - XNA ActiveX 控件 - 在 IE 中运行时找不到自定义 ContentReader

c# - Web 浏览器多线程转换异常

c# - Entity Framework Code First AddOrUpdate 方法插入重复值

c# - C#查询未返回任何内容

c# - 协助 Linq 查询

c# - 将 XhtmlTextWriter 与 XmlTextReader 结合使用

c# - Linq 和 ASP.NET MVC : Order data from latest to previous

c# - 没有 Stream.ReadByteAsync?