我在理解从 LINQ 查询中获得正确结果的方法时遇到了一些问题。
让我先定义实体ProductFavorite
public class ProductFavorite
{
public Guid Uid {get; set;}
public Guid ProductUid {get; set;}
public bool IsFavorite {get; set;}
public bool IsLastUsed {get; set;}
public int LastUsedYear {get; set;}
}
我有IEnumerable
一些最喜欢的产品,名为allFavorites
,其中包含以我之前编写的方式制作的对象。
这个“列表”可以包含具有重复项的元素ProductUid
,因为它是从不同的数据源构建的。
再说一遍:“列表”中的项目至少有IsFavorite = true
OR
IsLastUsed = true
.
当然,我想使用 LINQ 创建ProductFavorite
对象的结果列表,但按 ProductUid 对项目进行分组,并将三个属性分组如下:
仅当其中一个分组项目将此属性设置为 true 时,IsFavorite 才会为 true
仅当分组项目之一将此属性设置为 true 时 IsLastUsed 才会为 true
LastUsedYear 将是分组项目的 LastUsedYear 的最大值
我尝试了下一个语法,但我不确定它能否给我想要的东西:
var favorites =
from ProductFavorite pf in allFavorites
group pf by pf.ProductUid into distinctFavorites
select new ProductFavorite()
{
Uid = Guid.NewGuid(),
ProductUid = distinctFavorites.Key,
LastYearUsed = distinctFavorites.Max(l => l.LastYearUsed) // ???,
IsFavorite = ..., // ???
IsLastUsed = ... // ???
};