簡體   English   中英

使用Linq返回每個類別的第一個結果

[英]Use Linq to return first result for each category

我有一個具有3個屬性的類(ApplicationHistory):

ApplicantId,ProviderId,ApplicationDate

我將數據庫中的數據返回到列表中,但是其中包含重復的ApplicantId / ProviderId鍵。

我要禁止該列表,以便該列表僅包含每個ApplicantId / ProviderId的最早的應用程序日期。

下面的示例是我目前所在的位置,但是我不確定如何確保最早的日期返回。

    var supressed = history
        .GroupBy(x => new
        {
            ApplicantId = x.ApplicantId,
            ProviderId = x.ProviderId
        })
        .First();

所有建議表示贊賞。

回想一下,由GroupBy調用形成的每個組都是一個IGrouping<ApplicationHistory> ,它實現了IEnumerable<ApplicationHistory> 在此處閱讀有關IGrouping更多信息。 您可以訂購這些並選擇第一個:

var oldestPerGroup = history
    .GroupBy(x => new
    {
        ApplicantId = x.ApplicantId,
        ProviderId = x.ProviderId
    })
    .Select(g => g.OrderBy(x => x.ApplicationDate).FirstOrDefault()); 

您正在選擇第一組。 而是從每個組中選擇第一項:

var supressed = history
    .GroupBy(x => new {
        ApplicantId = x.ApplicantId,
        ProviderId = x.ProviderId
    })
    .Select(g => g.OrderBy(x => x.ApplicationDate).First());

或查詢語法(在這種情況下,您無需為匿名對象屬性指定名稱):

var supressed = from h in history
                group h by new {
                  h.ApplicantId,
                  h.ProviderId
                } into g
                select g.OrderBy(x => x.ApplicationDate).First();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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