我在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; }
}
答案 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