我在理解从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/

10-13 06:03