我有一组需要排序的字典值(List<>
)。基本上每个字典都是一个“行”,集合是一页行。一个简单的例子;
var data = new List<Dictionary<string,string>>();
data.Add(new Dictionary<string,string>() {
{ "Firstname", "Bob"},
{ "Lastname", "Banana"}
});
data.Add(new Dictionary<string, string>() {
{ "Firstname", "Amy"},
{ "Lastname", "Apple"}
});
data.Add(new Dictionary<string, string>() {
{ "Firstname", "Charlie"},
{ "Lastname", "Coconut"}
});
data.Add(new Dictionary<string, string>() {
{ "Firstname", "Andy"},
{ "Lastname", "Apple"}
});
生成的排序字符串类似于“SQL”,例如
Lastname asc, Firstname desc
我试过了.OrderBy()
在数据对象上,但这似乎不适用于 KeyValuePairs。
知道如何使用动态排序语句让数据列表按此顺序排序:
Apple, Andy
Apple, Amy
Banana, Bob
Coconut, Charlie
如果一些奇特的 LINQ 可以工作,则使用 .NET 4.0。感谢您的任何建议。
最佳答案
data.OrderBy(dict => dict["Lastname"])
.ThenByDescending(dict => dict["Firstname"])
如果是动态的:
var sorted = data.OrderBy(item => 1); // identity (stable) sort
orderby = "Lastname asc, Firstname desc";
foreach (var key in orderby.Split(',').Select(clause => clause.Trim()))
{
if (key.EndsWith(" desc", StringComparison.CurrentCultureIgnoreCase))
{
key = key.Substr(0, key.Length - 5);
sorted = data.ThenByDescending(dict => dict[key]);
} else
{
if (key.EndsWith(" asc", StringComparison.CurrentCultureIgnoreCase))
{
key = key.Substr(0, key.Length - 4);
}
sorted = data.ThenBy(dict => dict[key]);
}
}
关于c# - 字典列表排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6499882/