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# 区分大小写,因此您需要 拼写函数名称,例如 Take
和 Contains
正确。但是您可以通过使用 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 取而代之。
我尝试在每个组中获取 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# 区分大小写,因此您需要 拼写函数名称,例如 Take
和 Contains
正确。但是您可以通过使用 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 取而代之。