我有一个包含属性ID,brandID,brandName,NumPages和Type的对象。
我需要按照numPage大小显示前五大品牌,一个品牌可能有多个ID,所以我需要按品牌分组
listing.OrderByDescending(o => o.numPage).GroupBy(o=> o.brandName).Take(5).ToList();
仅仅是我正在寻找的行,但这不是有效的代码。
答案 0 :(得分:2)
听起来某个品牌名称可能有多个ID,并且您希望排名前五的品牌按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
答案 1 :(得分:0)
刚刚尝试过并且有效:
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);