關閉。這個問題需要除錯細節。它目前不接受答案。
編輯問題以包含所需的行為、特定問題或錯誤以及重現問題所需的最短代碼。這將幫助其他人回答問題。
14 天前關閉。
改進這個問題有一個包含以下資料的串列:
{ surname = surname_1, title = title_4, release_number = 111, year = 2021 }
{ surname = surname_1, title = title_1, release_number = 111, year = 2020 }
{ surname = surname_2, title = title_5, release_number = 222, year = 2021 }
{ surname = surname_2, title = title_2, release_number = 222, year = 2020 }
{ surname = surname_3, title = title_8, release_number = 222, year = 2022 }
如何獲得每個的最大年份release_number:
{ReleaseNumber = 111, Year = 2021}
{ReleaseNumber = 222, Year = 2022}
uj5u.com熱心網友回復:
考慮到你有一個list專案,你可以有這個 LINQ 查詢:
var releaseGroups =
from item in list
group item by item.release_number into releaseGroup
select new {ReleaseNumber = releaseGroup.Key, MaxYear = realseGroup.Select(o=>o.year).Max()};
uj5u.com熱心網友回復:
您需要為您的資料創建一個模型,然后使用下面的代碼
var items= new List<YourModel> {
new YourModel { surname = surname_1, title = title_4, release_number = 111, year = 2021 },
new YourModel { surname = surname_1, title = title_1, release_number = 111, year = 2020 },
new YourModel { surname = surname_2, title = title_5, release_number = 222, year = 2021 },
new YourModel { surname = surname_3, title = title_8, release_number = 222, year = 2022 },
};
var MaxByYear=
from item in items
group item by item.year into itemGroup
select new
{
Year = itemGroup.Key,
Max= itemGroup.Max(x => x.release_number),
};
// MaxByYear 是匿名物件的集合:
uj5u.com熱心網友回復:
您需要按版本號對資料進行分組,然后取最大年份(或按年份降序并先取)。
var res = testData.GroupBy(x => x.ReleaseNumber)
.Select(x => new {ReleaseNumber = x.Key, Year = x.OrderByDescending(t => t.Year).First().Year});
這是我的完整示例:
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
List<TestData> testData = new List<TestData>()
{
new TestData() {ReleaseNumber = 111, Year = 2021},
new TestData() {ReleaseNumber = 111, Year = 2020},
new TestData() {ReleaseNumber = 222, Year = 2021},
new TestData() {ReleaseNumber = 222, Year = 2020},
new TestData() {ReleaseNumber = 222, Year = 2022},
};
var res = testData
.GroupBy(x => x.ReleaseNumber)
.Select(x => new {ReleaseNumber = x.Key, Year = x.OrderByDescending(t => t.Year).First().Year});
foreach (var r in res)
{
Console.WriteLine($"Release number: {r.ReleaseNumber}, Year: {r.Year}");
}
Console.ReadLine();
}
}
public class TestData
{
public int ReleaseNumber { get; set; }
public int Year { get; set; }
}
}
uj5u.com熱心網友回復:
LINQ 語法大致相當于 SQL。要在 SQL 中的特定分組中獲取最大值,請使用 GROUP BY 子句指定分組,然后選擇該組中的最大值。
SELECT Key,MAX(SomeField)
FROM SomeTable
GROUP BY Key
所有其他答案都顯示了如何做到這一點,例如:
list
.GroupBy(i => i.release_number)
.Select(grp => new {grp.Key, grp.Select(i => i.year).Max());
但是,在使用記憶體串列時,GroupBy有幾個多載可以將代碼縮短為一行:
var results=list.GroupBy(item => item.release_number,
item=>item.Year,
(key,values) => new {
Key=key,
Max=values.Max()
});
在這個多載中,第一個引數提取組鍵。第二個提取我們想要在該組中的值。最后一個引數計算每個鍵的結果。
uj5u.com熱心網友回復:
list
.GroupBy(i => i.release_number)
.Select(grp => new {grp.Key, grp.Select(i => i.year).Max()});
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/494221.html
上一篇:無法將.contains()與LINQtoEntities一起使用
下一篇:物體框架。按子陣列元素的數量排序
