簡體   English   中英

LINQ將數據與條件分組和聚合

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM