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でアイテムをグループ化し、次のように3つのプロパティをグループ化します。

IsFavoriteは、グループ化されたアイテムの1つでこのプロパティがtrueに設定されている場合にのみtrueになります

IsLastUsedは、グループ化されたアイテムの1つでこのプロパティがtrueに設定されている場合にのみ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?)行はOKに見えます。最後の2つは

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

(「正確に1つのアイテム...」ではなく、「いずれかのアイテムがtrueに設定されている」という意味であると仮定します)

于 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 に答える