我知道如何按成員的最快時間生成串列(串列按最快時間顯示)。我還排除了未按以下方式輸入時間的記錄。但是我如何只顯示每個成員的最佳時間?例如名為 Trevor 的成員有 3 次最快的時間,但我只想顯示每個成員的最快時間?
public async Task<IActionResult> IndexFastestTimes()
{
var fastesttimes = await _context.MemberData.Where(x => x.Time.Minutes > 0).OrderBy(x => x.Time).ToListAsync();
return View(fastesttimes);
}
例如,上面將回傳
Trevor 24:00,
Trevor 24:05,
Trevor 24:20,
Paul 24:30,
Paul 24:40,
Tim 25:10,
Tim 25:20
但我想讓它回來
Trevor 24:00,
Paul 24:30,
Tim 25:10
uj5u.com熱心網友回復:
首先對于每個成員,您需要使用 group by as(將時間更改為 group by 中的成員欄位)
var fastesttimes = await _context.MemberData.Where(x => x.Time.Minutes > 0).GroupBy(x => x.F1, (key,g) => g.OrderBy(e => e.Time).First()).ToListAsync();
以上將首先根據條件分組,然后.First()將給出每個組的第一個條目
查看其他選項
如何使用Linq獲取每個組中的第一條記錄
Linq 查詢分組依據和選擇第一項
uj5u.com熱心網友回復:
感謝您的幫助 @Ajay2707 您讓我走上了正軌。我不得不將其拆分為兩個 linq 陳述句,如下所示:
public async Task<IActionResult> IndexFastestTimes()
{
var times = await _context.MemberData.Where(x => x.Time.Minutes > 0).OrderBy(x=>x.Time).ToListAsync();
var result = times.GroupBy(x => x.MemberId, (key, g) => g.OrderBy(e => e.Time).First()).ToList();
return View(result);
}
uj5u.com熱心網友回復:
private class Runner
{
public string Name { get; set; }
public double Time { get; set; }
}
public MainWindow()
{
InitializeComponent();
List<Runner> runners = new()
{
new Runner() { Name = "Trevor", Time = 41 },
new Runner() { Name = "Trevor", Time = 15 },
new Runner() { Name = "Trevor", Time = 16 },
new Runner() { Name = "Paul", Time = 22 },
new Runner() { Name = "Paul", Time = 12 },
new Runner() { Name = "Tim", Time = 5 },
new Runner() { Name = "Tim", Time = 150 }
};
Mylist.ItemsSource = runners.Where(x => x.Time > 5).GroupBy(x => x.Name, (x, key) => key.OrderByDescending(x => x.Time).First()).OrderByDescending(x => x.Time);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/343442.html
上一篇:為什么MemoryStream()有資料,即使它沒有用任何資料源初始化
下一篇:根據DB值驗證用戶輸入
