我正在努力想出一个 linq 语句,我想在其中只选择数组中具有最高版本的一些项目。 给定一组应用程序,例如:
[{name="Adobe", version=1},
{name="Adobe", version=2},
{name="Adobe", version=3},
{name="VLC", version=1},
{name="VLC", version=2},
{name="VLC", version=3}]
我需要一个 linq 来仅选择 1 个 adobe 应用程序(版本最高的那个)和 1 个 VLC 应用程序。 结果应该是这样的:
[{name="Adobe", version=3},
{name="VLC", version=3}]
到目前为止我得到的最好的是:
var names = apps.Select((n => n.name)).Distinct();
foreach (var name in names)
{
var latest = apps.Where(n => n.name == name).OrderByDescending(n => n.version).FirstOrDefault();
//add latest to the new appList
}
我一直在思考是否有更简单、仅 linq 的方法来执行此操作。有什么建议吗?
谢谢。
最佳答案
你可以尝试这样的事情:
var latest = apps.GroupBy(x=>x.name)
.Select(x=> new
{
Name=x.Key,
Version = x.OrderByDescending(y=>y.version)
.First().version
});
最初,我们将 GroupBy
作为应用程序的名称。然后我们选择每个组的项目,具有最新版本。
关于c# - 从数组中只选择最好的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27019672/