列表

时间:2018-05-04 18:11:23

标签: c# linq

我正在努力解决LINQ问题。我必须在所有选区(使用选区列表)中找到候选人的最高票数(Max),并获得ConstituencyName,CandidateName和Votes值。这意味着我必须在两个列表中找到最高值并选择对象选区(或者至少得到它的值)。

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;}
}

我尝试了很多解决方案,但我找不到符合我问题的解决方案: Join two tables using LINQ Query and order based two parametersLinq expression to find the max value of a List<List<int>>?

3 个答案:

答案 0 :(得分:2)

你可以在包含选区和候选人的单个可枚举匿名对象中选择多个,然后排序并抓住第一个。

.sql

答案 1 :(得分:0)

您可以使用匿名与orderbydescending结合来解决此问题。

var contituencyWithMostVotes = Constituencies
    .Select(c => new
    {
        Contituency = c,
        Candidate = c.Candidates.OrderByDescending(can => can.Votes).First()
    })
    .OrderByDescending(c => c.Candidate.Votes).First();

结果&#34; contituencyWithMostVotes&#34;是一个具有2个属性的匿名对象。

  1. 实际的选区对象
  2. 在该选区中获得最多选票的候选人。
  3. 您可以从这些属性中检索所有信息。

答案 2 :(得分:0)

您可以使用SelectMany()展平并将嵌套的候选人列表投射到匿名类型,然后使用MoreLinq's MaxBy()功能获得投票最多的人。

var result = constituencies.SelectMany(con => con.Candidates, (con, can) => 
new { Constituency = con, Candidate = can })
.MaxBy(x => x.Candidate.Votes);