我在理解从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
时,IsLastUsed才会为trueLastUsedYear将是分组项目的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 = ... // ???
};
答案 0 :(得分:2)
您的LastYearUsed
(或LastUsedYear
?)行看起来不错。对于最后两个你想要的
IsFavorite = distinctFavorites.Any(l=>l.IsFavourite),
IsLastUsed = distinctFavorites.Any(l=>l.IsLastUsed)
(假设你的意思是“任何其中一个项目设置为true”,而不是“完全其中一个项目......”)
答案 1 :(得分:0)
var favorites = (from ProductFavorite pf in allFavorites
group pf by pf.ProductUid into distinctFavorites
select new ProductFavorite()
{
Uid = Guid.NewGuid(),
ProductUid = distinctFavorites.Key,
IsFavorite = distinctFavorites.Any(p => p.IsFavorite == true),
IsLastUsed = distinctFavorites.Any(p => p.IsLastUsed == true),
LastUsedYear = distinctFavorites.Max(l => l.LastUsedYear)
});