Фильтрация списка с использованием лямбды - PullRequest
0 голосов
/ 14 января 2012

У меня есть объект, который имеет свойства ID, brandID, brandName, NumPages и Type.

Мне нужно показать топ-5 брендов по размеру numPage, у бренда может быть несколько идентификаторов, поэтому мне нужногруппировка по бренду

 listing.OrderByDescending(o => o.numPage).GroupBy(o=> o.brandName).Take(5).ToList();

- это только строки того, что я ищу, но это недействительный код.

Ответы [ 2 ]

2 голосов
/ 14 января 2012

Похоже, что у данного бренда может быть несколько идентификаторов, и вы хотите, чтобы 5 лучших брендов были отсортированы по numPage.Это правильно

Если это так, попробуйте следующее

var query = listing
  .GroupBy(x => x.brandName)
  .OrderByDescending(brands => brands.Sum(x => x.numPage))
  .Select(x => x.Key)
  .Take(5);

Примечание: после операции GroupBy вы теперь передаете коллекцию объектов бренда вместо отдельных.Следовательно, чтобы упорядочить по numPage, нам нужно сложить его для всех объектов бренда в группе..Select(x => x.Key) выберет обратно исходный brandName, на котором основана группа

0 голосов
/ 14 января 2012

только что попробовал и работает:

public class Listing
{
    public int ID { get; set; }
    public int BrandID { get; set; }
    public string BrandName { get; set; }
    public int NumPages { get; set; }
    public Type Type { get; set; }    
}

Здесь фильтрация

Listing listing1 = new Listing() { NumPages = 2, BrandName = "xx" };
Listing listing2 = new Listing() { NumPages = 2, BrandName = "xx" };
Listing listing3 = new Listing() { NumPages = 2, BrandName = "xx" };
Listing listing4 = new Listing() { NumPages = 3, BrandName = "xxxxx" };

List<Listing> allListings = new List<Listing>() { listing1, listing2, listing3, listing4 };

var result = allListings.OrderByDescending(x => x.NumPages).GroupBy(x => x.BrandName).Take(5);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...