簡體   English   中英

基於最大值的Linq C#

[英]Linq C# based on max value

我從數據庫中獲取數據,這導致以下結構。 InputFileIdFilename分組,僅選擇Failed的最大值。

InputFileId = 12, FileName = "Filename_12", Failed = false
InputFileId = 13, FileName = "Filename_13", Failed = false  
InputFileId = 13, FileName = "Filename_13", Failed = true   

現在我只想看看這個結果:

InputFileId = 12, FileName = "Filename_12", Failed = false
InputFileId = 13, FileName = "Filename_13", Failed = true   

到目前為止,Linq查詢是:

Files = (this.InputFileStatusService.GetFilesUploadedByDay(StartOfDay(SelectedDate), EndOfDay(SelectedDate), this.Deal.Id))
            .Where(a => a.InputFileId > 0)
            .GroupBy(m => new { m.InputFileId, m.FileName, Failed = m.Failed ? 1 : 0 })
            .Select(m => new 
            { 
                InputFileId = m.Key.InputFileId, 
                FileName = m.Key.FileName,
                Failed = m.Max(x=>x.Failed) 
            }).ToList();

但這是行不通的,有人對此有解決方案嗎?

您將按“ Failed分組,因此在每個組中您將有1個項目,並且該項目的“ Max(Failed)與鍵中的項相同。

僅按InputFieldId分組,並檢查Failed組中的Any是否具有true值:

Files = (this.InputFileStatusService.GetFilesUploadedByDay(StartOfDay(SelectedDate), EndOfDay(SelectedDate), this.Deal.Id))
            .Where(a => a.InputFileId > 0)
            .GroupBy(m => new { m.InputFileId, m.FileName })
            .Select(m => new 
            { 
                InputFileId = m.Key.InputFileId, 
                FileName = m.Key.FileName, 
                Failed = m.Any(x => x.Failed) 
            }).ToList();

應該足以將Max替換為Any

Failed = m.Any(x => x.Failed) 

並刪除Failed = m.Failed ? 1 : 0 Failed = m.Failed ? 1 : 0英寸

.GroupBy(m => new { m.InputFileId, Failed = m.Failed ? 1 : 0 })

由於這些列似乎相互對應,因此您可能會考慮為m.FileName添加一個分組。

暫無
暫無

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

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