c# Linq 为每个组取 5 个对象

c# Linq Take 5 Object for each Group

我尝试在每个组中获取 5 个对象来显示。 我试过这样的代码:

var BBS = (from bb in db.Object
           where SubjectList.Contain(bb.Type)
           select new ObjectModel {
               Subject = bb.Subject,
               CDate = bb.CDate
           }).GroupBy(a => a.BBSTypeSubject).Take(5);

但它不起作用。 然后我使用 Foreach

进行尝试

当您 select 新建 ObjectModel 时,没有 属性 称为 BBSTypeSubject。你需要包括那个。所以应该是

select new ObjectModel {
 Subject = bb.Subject, 
 CDate = bb.CDate,
 BBSTypeSubject= ???
}

首先,意识到 C# 区分大小写,因此您需要 拼写函数名称,例如 TakeContains正确。但是您可以通过使用 this overload of GroupBy 来相当容易地解决这个问题。

var BBS = (from bb in db.Object
           where SubjectList.Contains(bb.Type)
           select new ObjectModel {
               Subject = bb.Subject,
               CDate = bb.CDate
           }).GroupBy(a => a.BBSTypeSubject, (k, g) => g.Take(5));

第二个参数允许您指定将为每个组return编辑的结果对象。在这种情况下,我只是从组中取出前 5 个项目,然后 return 取而代之。