Подтвердить что ты не робот

Как сортировать коллекцию по дате в С#

У меня есть список, который мне нужно сортировать по DateTime, класс MyStuff выглядит так:

public class MyStuff
{
   public int Type {get;set;}
   public int Key {get;set;}
   public DateTime Created {get;set;}
}

Мне нужно иметь возможность сортировать список коллекции по полю Created (DateTime).

4b9b3361

Ответ 1

Кажется, вы работаете с объектом List<T>, и в этом случае наиболее эффективным (и простым) методом будет следующее:

myList.Sort((x, y) => DateTime.Compare(x.Created, y.Created));

Это использует перегрузку метода List.Sort, чем принимает делегат Comparison<T> (и, следовательно, лямбда-выражение).

Конечно, вы можете использовать метод расширения LINQ OrderBy, но я не думаю, что это дает какие-либо преимущества и может быть значительно медленнее, в зависимости от вашей ситуации.

myList = myList.OrderBy(x => x.Created).ToList();

Ответ 2

var query = 
    from m in mystuffcollection
    orderby m.Created ascending
    select m;

Ответ 3

Вы можете использовать using System.Linq; из сущности, учитывая, что вы используете ядро .net в вашем приложении. Linq предоставляет вам оба метода FilterBy и OrderBy, для пользовательских FilterBy и OrderBy вам необходимо переопределить методы в вашем классе или репозитории.

 override
 protected IQueryable<myStuff> FilterBy(IQueryable<MyStuff> myProcess, string filterBy, string filterValue)
                {
                    var listFilter = filterBy.Split(',');
                    var listValues = filterValue.Split(',');

                    for (int index = 0; index < listFilter.Length; index++)
                    {
                        var filter = listFilter[index];
                        var value = listValues[index];

                        switch (filter)
                        {
                            case "type":
                                myProcess = myProcess.Where(c => c.Status.Nome.Contains(value));
                                break;
                            case "created":
                                  myProcess = myProcess.Where(c => c.Created - DateTime.Parse(value) >= new TimeSpan(0, 0, 0));
                            default:
                               break;
                  }
                }
              }

    override
    protected IQueryable<myStuff> OrderBy(IQueryable<MyStuff> myProcess, string attribute, string direction)
                {
                    switch (attribute)
                    {
                        case "type":
                            myProcess = (direction == "asc")
                                ? myProcess.OrderBy(c => c.Type)
                                : myProcess.OrderByDescending(c => c.Type);
                            return myProcess;
                        case "created":
                            myProcess = (direction == "asc")
                                ? myProcess.OrderBy(c => c.Created)
                                : myProcess.OrderByDescending(c => c.Created);
                    return myProcess;
                 }
                }