C# 使用lambda筛选列表

C# 使用lambda筛选列表,c#,list,lambda,C#,List,Lambda,我有一个对象,它有属性ID、brandID、brandName、NumPages和Type 我需要显示前5名品牌的numPage大小,一个品牌可能有多个ID,所以我需要按品牌分组 listing.OrderByDescending(o => o.numPage).GroupBy(o=> o.brandName).Take(5).ToList(); 只有一行是我要找的,但这不是有效的代码。听起来一个给定的品牌名称可能有几个ID,并且您希望前5个品牌按numPage排序。对吗 如果是

我有一个对象,它有属性ID、brandID、brandName、NumPages和Type

我需要显示前5名品牌的numPage大小,一个品牌可能有多个ID,所以我需要按品牌分组

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

只有一行是我要找的,但这不是有效的代码。

听起来一个给定的品牌名称可能有几个ID,并且您希望前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)
将选择退出该组所基于的原始
品牌名
,刚刚尝试过并且可以工作:

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);
listing1=newlisting(){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 ALLISTINGS=new List(){listing1,listing2,listing3,listing4};
var result=allListings.OrderByDescending(x=>x.NumPages).GroupBy(x=>x.BrandName).Take(5);

为什么无效?您是否收到错误消息或只是没有得到想要的结果。
I分组
没有
numPage
成员,因此不应该编译。@hvd我在Visual Studio中验证了这是编译的。我的一个早期版本有一个打字错误,但当前版本应该可以。是的,我的评论是基于
.OrderByDescending(x=>x.numPage.Sum())
,您确实已经修复了该错误。@hvd我想每次我交给角色groupby时,我都会被这个错误咬到:(我得到一个Arguement null执行,它不是有效的代码,我应该提到它而不是var查询,我在一个从返回视图调用的viewModel中这样做(newviewmodel(listing.GroupBy…),但这不会有什么区别