如何通过c#中的属性对类值的哈希表进行排序?

时间:2016-10-26 03:06:08

标签: c# linq hashtable

我在C#中有一个Hashtable。

Hashtable people = new Hashtable();
people.Add(0, new Person("Jimmi", "Hendrix"));
people.Add(1, new Person("Bob", "Dylan"));
people.Add(2, new Person("Jim", "Morrison"));

我如何使用Linq的姓氏对此哈希进行排序?

class Person
{
    public Person(string firstName, string lastName): this(firstName, lastName, DateTime.Now)
    {}

    public Person(string firstName, string lastName, DateTime birthDate)
    {
        FirstName = firstName;
        LastName = lastName;
        DateOfBirth = birthDate;
    }

    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime DateOfBirth { get; set; }
}

2 个答案:

答案 0 :(得分:1)

var result = people.Cast<DictionaryEntry>().OrderBy(kvp => ((Person)kvp.Value).LastName);

但结果变为OrderedEnumerable,因为回到Hashtable会忘记订单。\

编辑: 如果您正在寻找一种方法来枚举结果并提取id以及Person信息,那么您就是这样做的:

// this is the original answer
var result = people.Cast<DictionaryEntry>().OrderBy(kvp => ((Person)kvp.Value).LastName);

// now convert it to an array
var listToIterate = result.ToArray();
foreach(var item in listToIterate)
{
    var id = item.Key;
    var person = (Person)item.Value;
}

希望这有助于......!

答案 1 :(得分:0)

您正在使用非通用(IMO遗留)数据类型。所以你需要戳一下才能得到你想要的东西。

people.Values.OfType<Person>().OrderBy(p => p.LastName);

首先,您要对值进行排序,但这不是通用的,因此请使用OfType。现在您可以使用标准的Linq运算符,例如OrderBy