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 = ... // ???
};