tableA
包含用户访问过的最近项目列表,用户可以选择固定/删除列表。
我正在尝试的是列表必须通过以下查询排序。
select * from tableA
order by ispinned desc,
case when ispinned = 1 then date end ASC,
case when ispinned = 0 then date end DESC
但是在LINQ中失败了。我试过的就像下面的那样。
_lst = _lst.OrderByDescending( x => x.IsPinned).ThenByDescending(x=>x.AccessDate).ToList();
_lst = (from data in _lst
orderby data.IsPinned, data.IsPinned ? data.Date : data.Date descending
select data ).ToList();
答案 0 :(得分:1)
尝试:
_lst = _lst.OrderByDescending(x => x.IsPinned)
.ThenBy(x=> x.IsPinned ? x.AccessDate.Ticks : x.AccessDate.Ticks * -1 )
.ToList();
答案 1 :(得分:0)
这可能对您有所帮助,但它可能不是最有效的方式。
var result = _lst.Where(x => x.IsPinned)
.OrderBy(x=> x.AccessDate)
.Concat(_lst.Where(x => !x.IsPinned)
.OrderByDescending(x=> x.AccessDate))
.ToList();
编辑:此外,如果你不喜欢拆分和连接的想法,你可以试试这个想法:
var result = _lst.OrderByDescending(i=>i.IsPinned).
.ThenBy(i=>i.IsPinned? i.Date - DateTime.MinValue :
DateTime.MaxValue - i.Date)
.ToList();
答案 2 :(得分:0)
你可以试试这个:
_lst = _lst.OrderByDescending(x => x.IsPinned).ThenBy(x => x.IsPinned ?
x.AccessDate : DateTime.MinValue).ThenByDescending(x => !x.IsPinned ?
x.AccessDate : DateTime.MaxValue).ToList();