Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何对对象中的属性进行排序_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

C# 如何对对象中的属性进行排序

C# 如何对对象中的属性进行排序,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,如果我有一个类似于下面模型的类,那么对于每个选择对象,需要在视图中的下降顺序中显示多个整数属性cand1voces、cand2voces和cand3voces。对于特定选举,cand1票可能是第一票,cand3票第二票,cand2票第三票 到目前为止,我的解决方案是为每个选举对象创建一个列表,然后将其发送到ViewModel并在视图中使用 到目前为止,我的解决方案是可行的,但我正在寻找一种解决方案,通过该解决方案,我可以动态地对对象中的整数元素排序,而无需创建另一个列表 任何帮助都将不胜感激 模

如果我有一个类似于下面模型的类,那么对于每个
选择
对象,需要在视图中的
下降顺序
中显示多个整数属性
cand1voces
cand2voces
cand3voces
。对于特定选举,
cand1票
可能是第一票,
cand3票
第二票,
cand2票
第三票

到目前为止,我的解决方案是为每个选举对象创建一个
列表
,然后将其发送到ViewModel并在视图中使用

到目前为止,我的解决方案是可行的,但我正在寻找一种解决方案,通过该解决方案,我可以动态地对对象中的整数元素排序,而无需创建另一个
列表

任何帮助都将不胜感激

模型

公共类选举{
公共int Id{get;set;}
公共整数?总投票数{get;set;}
公共int?cand1voces{get;set;}
公共字符串Cand2Name{get;set;}
公共int?cand2voces{get;set;}
公共字符串Cand2Name{get;set;}
公共字符串Cand3Name{get;set;}
公共整数?cand3voces{get;set;}
公共int?其他投票{get;set;}
}
公共静态列表OrderByVoces(选举)
{
var votesArray=新列表()
{
新的KeyValuePair(election.cand1名称、election.cand1投票),
新的KeyValuePair(election.cand2名称,election.cand2投票),
新的KeyValuePair(election.cand3名称,election.cand3投票),
新的KeyValuePair(“其他候选人”,选举。其他投票)
};
var result=votesArray.OrderByDescending(k=>k.Value);
返回result.ToList();
}

我认为对模型进行一点重构会使这变得更容易:

public class Election
{
    public int Id { get; set; }
    public int TotalVotes { get; set; }
    public List<Candidate> Candidates { get; set; }

    public void AddCandidate(Candidate c)
    {
        Candidates.Add(c);
    }

    public List<Candidates> SortCandidates()
    {
        return Candidates.OrderByDescending(k => k.NumVotes).ToList();
    }
}

public class Candidate
{
     public string Name { get; set; }
     public int NumVotes { get; set; }        
}
公共类选举
{
公共int Id{get;set;}
公共整数总投票数{get;set;}
公共候选列表{get;set;}
公众候选人(候选人c)
{
增补(c);
}
公共列表排序条件()
{
返回候选者.OrderByDescending(k=>k.NumVotes.ToList();
}
}
公开课候选人
{
公共字符串名称{get;set;}
公共整数NumVotes{get;set;}
}

这将允许任意数量的候选人出现在您的选举类中,您可以对选举对象调用SortCandidates()方法,以获得按降序NumVotes排序的候选人列表。通过查看候选人列表,显示第一、第二、第三等候选人。按顺序排列候选人。

开车经过downvoter,有什么原因吗?我希望候选人在一个可观察的集合中,而不是作为单独的变量。然后,您可以将此集合设置为视图的集合源,并在视图中对其进行排序,如下所示:我愿意打赌此模型表示一个数据库表,但如果我错了,请纠正我。接受@AmittaiShapira的建议会更容易,但如果这不是一个选项,那么在对象内重新排序到底意味着什么?你想让
Cand1Name
cand1voces
包含最低的投票名/值,
Cand2Name
cand2voces
包含下一个最低的值,等等吗?@Sam我从没想过这一点。但这是另一种可能的方式,我可以做到这一点。我最初的想法是按降序动态打印候选人姓名和选票。在这种情况下,如果你能像马特的答案中建议的那样重新考虑因素,你会让自己的生活更轻松。
public class Election
{
    public int Id { get; set; }
    public int TotalVotes { get; set; }
    public List<Candidate> Candidates { get; set; }

    public void AddCandidate(Candidate c)
    {
        Candidates.Add(c);
    }

    public List<Candidates> SortCandidates()
    {
        return Candidates.OrderByDescending(k => k.NumVotes).ToList();
    }
}

public class Candidate
{
     public string Name { get; set; }
     public int NumVotes { get; set; }        
}