List <T>的自定义排序

ear*_*ing 3 c# sorting generics lambda

我有一个List<T>地方T是我的Event类型具有字段time类型long.此列表从Web服务填充,如果事件没有时间,则值集为0.

我想要做的是按时间按升序排序我的列表,但是在最底部放置时间= 0的项目.

目前我正在以一种黑客的方式实现这一点,我想学习更好的方法.

var events = new ObservableCollection<Event>();
var resp = JsonConvert.DeserializeObject<Events>(restResponse.Content).Items;

var notime = resp.Where(r => r.time == 0);
var yestime = resp.Where(r => r.time > 0);

yestime.ToList().ForEach(events.Add);
notime.ToList().ForEach(events.Add);

CallbackInternal(callback, events);
Run Code Online (Sandbox Code Playgroud)

我试图实现一个自定义IComparer,但是效果不是很好(这里只有一个)

public class EventComparer : IComparer<Event>
{
    public int Compare(Event x, Event y)
    {
        if (x.time == 0) return 0;
        if (x.time < y.time) return -1;
        if (x.time > y.time) return 1;
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

指导表示赞赏!

谢谢!

Phi*_*hil 11

尝试

   events.OrderBy (e => e.Time == 0).ThenBy (e => e.Time);
Run Code Online (Sandbox Code Playgroud)