Benim özel örneğim oldukça karmaşıktır, ancak konseptin bir kayıt sistemi gibi bir şeye eşit şekilde uygulanacağını düşünüyorum, bunun yerine bunu açıklama kolaylığı için kullanacağım. Bu bir ficticious örnek, üzerinde durmak veya achitectually ne üzerinde tereddüde düşerler, programlama yoluyla veya örneğin kendisi :) LINQ: Distinct/GroupBy ile IEnumerable arasından seçim yapın ve sıralama yapın - mümkün mü?
bunun sende Say ile ahlaken yanlış etmeyiniz:class LogEntry
{
int ID;
int UserName;
datetime TimeStamp;
string Details;
}
ve bir dizi çekti böyle verilerin: ne yapmak istediğiniz her kullanıcı (yani GroupBy adı) için sadece son tek kaydı (TimeStamp Azalan üzerinde yani sırala) seçim'dir
ID Username Timestamp Details
1 foo 1/01/2010 Account created
2 zip 2/02/2010 Account created
3 bar 2/02/2010 Account created
4 sandwich 3/03/2010 Account created
5 bar 5/05/2010 Stole food
6 foo 5/05/2010 Can't find food
7 sandwich 8/08/2010 Donated food
8 sandwich 9/09/2010 Ate more food
9 foo 9/09/2010 Ate food
10 bar 11/11/2010 Can't find food
. Kafamı Distinct ve daha az ölçüde GroupBy'ye getirebilirim, fakat bunların hepsini tek bir ifadeyle birleştirerek tekil olmayan/gruplanmış alanları/özellikleri döndürür ve zaman damgasına göre sıralar bana başım ağrıyor. Yukarıdaki örnekte ile çıkıp gerekenler
geçerli:ID Username Timestamp Details
2 zip 2/02/2010 Account created
8 sandwich 9/09/2010 Ate more food
9 foo 9/09/2010 Ate food
10 bar 11/11/2010 Can't find food
performansı burada ve ben kritik olmadığı zaman ben 'hile' ve bunu yaparken bir çok uzatan bir şekilde başvurmak istemiyoruz
Tek bir LINQ ifadesinde yapılabileceğinden eminim. Senin Örneğin tamamen aynı çıktıyı verir =)
var results = sourceList
.OrderByDescending(item => item.Timestamp)
.GroupBy(item => item.Username)
.Select(grp => grp.First())
.ToArray();
Bu örnek kod, verileri kullanarak, ve kimliğine göre nihai sipariş:
Son sıralamanın nasıl olmasını istersiniz? – Will