为什么不通过您声明的匿名类型将序列号作为密钥的一部分包含在内:
var items = context.Items.GroupBy(g => new {g.Name, g.Model, g.SerialNumber })
.Where(/*...*/)
.Select(i => new ItemModel {
Name=g.Key.Name,
SerialNumber = g.FirstOrDefault().SerialNumber //<-- here
});
或者,或者,使您的对象成为关键:
var items = context.Items.Where(...).GroupBy(g => g)
.Select(i => new ItemModel {...});
有时更容易理解查询语法(在这里,我将Item
对象投影为键的一部分):
var items = from i in context.Items
group i by new { Serial = g.Serialnumber, Item = g } into gi
where /* gi.Key.Item.GetType() == typeof(context.Items[0]) */
select new ItemModel {
Name = gi.Key.Name,
SerialNumber = gi.Key.Serial
/*...*/
};
编辑:您可以尝试在投影后进行分组,如下所示:
var items = context.Items.Where(/*...*/).Select(i => new ItemModel { /*...*/})
.GroupBy(g => new { g.Name, g.Model });
你可以从中得到一个
IGrouping<AnonymousType``1, IEnumerable<ItemModel>>
,以你的任意group by
作为键,你的 ItemModels 作为分组集合。