[英]LINQ grouping and aggregating data with conditions
我在理解從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 = ... // ???
};
您的LastYearUsed
(或LastUsedYear
嗎?)行看起來LastYearUsed
。 對於最后兩個,您需要
IsFavorite = distinctFavorites.Any(l=>l.IsFavourite),
IsLastUsed = distinctFavorites.Any(l=>l.IsLastUsed)
(假設您的意思是“ 任何一項都將其設置為true”,而不是“ 恰好是其中一項...”)
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)
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.