我在理解从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对项目进行分组,并按如下方式对这三个属性进行分组:我已经尝试了下一种语法,但是我不确定它能否满足我的需求:
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 = ... // ???
};
最佳答案
您的LastYearUsed
(或LastUsedYear
吗?)行看起来不错。对于最后两个,您需要
IsFavorite = distinctFavorites.Any(l=>l.IsFavourite),
IsLastUsed = distinctFavorites.Any(l=>l.IsLastUsed)
(假设您的意思是“其中任何一项都设置为true”,而不是“恰好是其中一项...”)
关于c# - LINQ对条件进行分组和汇总,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12109141/