【发布时间】:2012-08-24 12:07:59
【问题描述】:
我在理解从 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 对项目进行分组,并将三个属性分组如下:
IsFavorite 仅在分组项目之一将此属性设置为 true 时才为 true
IsLastUsed 仅当其中一个分组项将此属性设置为 true 时才为 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 = ... // ???
};
【问题讨论】: