You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用LINQ查询嵌套列表中候选人的最高得票及对应信息

解决嵌套选区列表中候选人最高得票数的LINQ查询方案

嘿,我来帮你搞定这个LINQ查询的问题!首先得明确一下类的完整结构——你给的Constituency类里没提候选人列表,我假设它包含候选人集合,同时补充Candidate类的定义(没有这些我们没法关联选区和候选人的得票数据):

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 Name { get; set; } 
    public int Votes { get; set; } // 得票数属性
}

接下来分两种常见场景给你方案:

场景1:直接找全局所有候选人中的最高得票(含并列情况)

这个方案会先把嵌套的候选人列表“拍平”,关联每个候选人所属的选区,然后找出最高得票数,最后筛选出所有达到该票数的候选人及对应选区信息:

// 假设你的ListOfConstituencies实例已经填充了数据
var constituencyData = new ListOfConstituencies();

// 1. 扁平化数据:将每个候选人与所属选区绑定
var allCandidatesWithConstituency = constituencyData.Constituencies
    .SelectMany(constituency => constituency.Candidates
        .Select(candidate => new 
        {
            ConstituencyName = constituency.ConstituencyName,
            CandidateName = candidate.Name,
            Votes = candidate.Votes
        }));

// 2. 获取全局最高得票数
int maxTotalVotes = allCandidatesWithConstituency.Max(c => c.Votes);

// 3. 筛选出所有得票数等于最高票的结果
var topCandidates = allCandidatesWithConstituency
    .Where(c => c.Votes == maxTotalVotes)
    .ToList();

这个方法的优势是高效且直接,不管有多少个候选人并列最高,都能一次性全部获取。

场景2:先找每个选区的最高得票候选人,再从中选全局最高

如果你需要先保留每个选区的最高票候选人信息,再从中筛选全局最高,就用这个方案:

var constituencyData = new ListOfConstituencies();

// 1. 找出每个选区的最高票候选人(排除无候选人的选区)
var constituencyTopCandidates = constituencyData.Constituencies
    .Select(constituency => new 
    {
        ConstituencyName = constituency.ConstituencyName,
        TopCandidate = constituency.Candidates.OrderByDescending(c => c.Votes).FirstOrDefault()
    })
    .Where(item => item.TopCandidate != null); // 过滤空候选人的选区

// 2. 获取所有选区最高票中的最大值
int globalMaxVotes = constituencyTopCandidates.Max(item => item.TopCandidate.Votes);

// 3. 筛选出全局最高的候选人及对应选区
var globalTopCandidates = constituencyTopCandidates
    .Where(item => item.TopCandidate.Votes == globalMaxVotes)
    .Select(item => new 
    {
        item.ConstituencyName,
        CandidateName = item.TopCandidate.Name,
        item.TopCandidate.Votes
    })
    .ToList();

注意事项

  • 记得处理空值:如果某个选区没有候选人,FirstOrDefault会返回null,所以一定要用Where过滤掉这些条目,避免后续Max操作抛出异常。
  • 如果你的数据量很大,优先用场景1的方案,因为先取最大值再筛选的效率比排序后取前几名更高。

内容的提问来源于stack exchange,提问作者Dawid Stefaniak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:10:48