6

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

仅当分组项目之一将此属性设置为 true 时 IsLastUsed 才会为 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 = ...   // ???
        };
4

2 回答 2

2

您的LastYearUsed(或LastUsedYear?)行看起来不错。最后两个你会想要

IsFavorite = distinctFavorites.Any(l=>l.IsFavourite),
IsLastUsed = distinctFavorites.Any(l=>l.IsLastUsed)

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

于 2012-08-24T12:22:53.100 回答
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) 
                });
于 2012-08-24T12:23:31.677 回答