开发者

how to sort a collection by datetime in c#

开发者 https://www.devze.com 2022-12-09 03:25 出处:网络
I have a List that I need to sort by DateTime, the c开发者_运维知识库lass MyStuff looks like:

I have a List that I need to sort by DateTime, the c开发者_运维知识库lass MyStuff looks like:

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

I need to be able to sort the collection List by the Created (DateTime) field.


You seem to be working with a List<T> object, in which case the most efficient (and a simple) method would be the following:

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

This uses the overload of the List.Sort method than takes a Comparison<T> delegate (and thus lambda expression).

You can of course use the LINQ OrderBy extension method, but I don't think this offers any advantages, and can be significantly slower, depending on your situation.

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


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


For those who are looking for a way to sort the data on the basis of a nested property can use the sort function something like below:

MyList.Sort((x, y) => x.Datetime.CompareTo(y.Datetime));

Now the major differences between using OrderBy and Sort are performance and return value.

Sort basically sorts the existing List<T> whereas OrderBy returns a new IEnumerable<T>


You can use using System.Linq; from entity framework, considering you are using .net core in your application. The Linq provides you both FilterBy and OrderBy methods, for custom FilterBy and OrderBy you need to override the methods in your class or Repository.

 override
 protected IQueryable<T> FilterBy(IQueryable<T> 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<T> OrderBy(IQueryable<T> 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;
                 }
                }
0

精彩评论

暂无评论...
验证码 换一张
取 消