[英]Linq C# based on max value
我從數據庫中獲取數據,這導致以下結構。 按InputFileId
和Filename
分組,僅選擇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.