我有一个包含学生数据的字典列表 有点像
List<Dictionary<string, object>> students = new List<Dictionary<string, object>>();
Dictionary<string, object> std1 = new Dictionary<string, object>();
std1["name"] = "sai";
std1["age"] = 22;
std1["gender"] = "male";
students.Add(std1);
Dictionary<string, object> std2 = new Dictionary<string, object>();
std2["name"] = "Julia";
std2["gender"] = "female";
students.Add(std2);
Dictionary<string, object> std3 = new Dictionary<string, object>();
std3 ["name"] = "sunny";
std3 ["age"] = 23;
students.Add(std3);
我想根据 name
、age
或 gender
对学生列表进行排序,我正在尝试这样的操作:
var ordered = students.OrderBy(x => x["name"]);
如果我尝试使用 age
或 gender
它会返回一个错误,指出找不到 key ,因为 std2
没有 age
和 std3
没有 gender
。
我需要所有记录,即使它不包含排序键的值,任何解决此问题的方法,在此先感谢。
最佳答案
最好像这样创建一个类:
public class YourClass
{
public string Name { get; set; }
public int Age { get; set; }
public string Gender { get; set; }
}
然后:
List<YourClass> students = new List<YourClass>();
YourClass std1 = new YourClass();
std1.Name = "sai";
std1.Age = 22;
std1.Gender = "male";
students.Add(std1);
yourClass std2 = new yourClass();
std2.Name = "Julia";
std2.Gender = "female";
students.Add(std2);
yourClass std3 = new yourClass();
std3.Name = "sunny";
std3.Age = 23;
students.Add(std3);
var ordered = students.OrderBy(x => x.Name);
这种安排存储了您在多个词典中的相同数据。但是,它更加清晰易懂。
关于c# - 根据键对字典列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32285024/