gpt4 book ai didi

c# - LINQ 根据条件分组和聚合数据

转载 作者:太空狗 更新时间:2023-10-29 21:54:56 24 4
gpt4 key购买 nike

我在理解从 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 will be true only if one of the grouped items has this property set to true

IsLastUsed will be true only if one of the grouped items has this property set to true

LastUsedYear will be the maximum value of LastUsedYear of the grouped items

我已经尝试了下一个语法,但我不确定它能给我我想要的东西:

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)

(假设您的意思是“任何其中一项已设置为真”,而不是“正是其中一项...”)

关于c# - LINQ 根据条件分组和聚合数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12109141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com