首页 > 解决方案 > LINQ Max() 在列表里面的列表

问题描述

我正在为 LINQ 查询而苦苦挣扎。我必须在所有选区(使用选区列表)中找到候选人的最高票数(Max)并获得选区名称、候选人名称和投票值。这意味着我必须在两个列表中找到最高值并选择对象选区(或至少获取它的值)。

public class ListOfConstituencies()
{
    public List<Constituency> Constituencies {get;set;}
}

public class Constituency
{
    public string ConstituencyName {get;set;}
    public List<Candidate> Candidates {get;set;}
}

public class Candidate
{
    public string CandidateName {get;set;}
    public int Votes {get;set;}
}

我尝试了许多解决方案,但找不到适合我的问题的解决方案,例如: 使用 LINQ 查询和基于顺序的两个参数Linq 表达式连接两个表以查找 List<List<int>> 的最大值?

标签: c#linq

解决方案


您可以在包含选区和候选人的单个可枚举匿名对象中进行选择,然后排序并获取第一个。

var candidate = Contituencies
.SelectMany(constituency => constituency.Candidates.Select(candidate => 
   new 
   {
     Constituency = constituency, 
     Candidate = candidate
   }))
.OrderByDescending(candidateInfo => candidateInfo.Candidate.Votes).FirstOrDefault();
string constituencyName = candidate.Constituency.ConstituencyName;
string candidatename = candidate.Candidate.CandidateName;
int votes = candidate.Candidate.Votes;

推荐阅读