J'ai un List<MyClass>
et je veux le trier par DateTime CreateDate
attribut de MyClass.Trier une liste de classe avec LINQ
Est-ce possible avec LINQ?
Merci
J'ai un List<MyClass>
et je veux le trier par DateTime CreateDate
attribut de MyClass.Trier une liste de classe avec LINQ
Est-ce possible avec LINQ?
Merci
Vous pouvez énumérer dans l'ordre de tri:
IEnumerable<MyClass> result = list.OrderBy(element => element.CreateDate);
Vous pouvez également utiliser ToList()
pour convertir à une nouvelle liste et réassigner à la variable d'origine:
list = list.OrderBy(element => element.CreateDate).ToList();
Cette n'est pas tout à fait la même chose que le tri de la liste originale, car si quelqu'un a encore une référence à l'ancienne liste, il ne verra pas la nouvelle commande. Si vous souhaitez réellement trier la liste d'origine, vous devez utiliser la méthode List<T>.Sort
.
Voici un exemple:
using System.Collections.Generic;
using System.Linq;
namespace Demo
{
public class Test
{
public void SortTest()
{
var myList = new List<Item> { new Item { Name = "Test", Id = 1, CreateDate = DateTime.Now.AddYears(-1) }, new Item { Name = "Other", Id = 1, CreateDate = DateTime.Now.AddYears(-2) } };
var result = myList.OrderBy(x => x.CreateDate);
}
}
public class Item
{
public string Name { get; set; }
public int Id { get; set; }
public DateTime CreateDate { get; set; }
}
}
"Avez-vous essayé d'utiliser linq?" LOL - c'est la question! – Aaronaught
Ya c'était une faute de frappe ... lol – anthonyv
Bien sûr, les autres réponses avec le travail .OrderBy()
, mais cela ne vous fera pas plutôt votre article source de IComparable
et héritera simplement appeler .Sort()
?
Pour trier la existante liste:
list.Sort((x,y) => x.CreateDate.CompareTo(y.CreateDate));
Il est également possible d'écrire une méthode d'extension Sort
, ce qui permet:
list.Sort(x => x.CreateDate);
par exemple:
public static class ListExt {
public static void Sort<TSource, TValue>(
this List<TSource> list,
Func<TSource, TValue> selector) {
if (list == null) throw new ArgumentNullException("list");
if (selector == null) throw new ArgumentNullException("selector");
var comparer = Comparer<TValue>.Default;
list.Sort((x,y) => comparer.Compare(selector(x), selector(y)));
}
}
+1 pour le montrer – Kubi
class T {
public DateTime CreatedDate { get; set; }
}
à utiliser:
List<T> ts = new List<T>();
ts.Add(new T { CreatedDate = DateTime.Now });
ts.Add(new T { CreatedDate = DateTime.Now });
ts.Sort((x,y) => DateTime.Compare(x.CreatedDate, y.CreatedDate));
-vous par le CreateDate de la propriété qui est de type DateTime? –
oui je voulais dire la propriété – Kubi