我有一个列表,我希望它按 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/