我试图在将值推入字典之前对值Descending进行排序。查询工作正常,但我只需要添加排序功能。
以下是我原来的LINQ查询
List<Model> list = query1.Where(x => x.ItemsPrice.Any())
.GroupBy(x => new { Student = query2.FirstOrDefault(y => y.Id == x. Id).Student.Name })
.Select(x => new Model
{
StudentName = x.Key.Student,
ClassItems = x.SelectMany(y => y. ItemsPrice)
.GroupBy(y => y. Price.item.Name)
.ToDictionary(y => y.Key, y => y.Sum(z => z.TotalPrice()))
}).ToList();
我正在尝试以下代码,但它正在发出此错误
无法将IOrderedEnumerables隐式转换为System.Collection.Generic.Dictioanry。
.ToDictionary(y => y.Key, y => y.Sum(z => z.TotalPrice())).OrderByDescending(y => y.Value)
答案 0 :(得分:3)
这样的事情对你有用:
public class MyComparer : IComparer<int>
{
public int Compare(int x, int y)
{
return x.CompareTo(y);
}
}
// ...
private void DoStuff()
{
var dict = new Dictionary<int, int> {{3, 300}, {2, 200}};
var sortedDict = new SortedDictionary<int, int>(dict, new MyComparer());
}
或者在您的具体情况中:
private class DescendingComparer : IComparer<string>
{
int IComparer<string>.Compare(string a, string b)
{
return StringComparer.InvariantCulture.Compare(b, a);
}
}
// ....
ClassItems = new SortedDictionary<string, float>(x.SelectMany(y => y. ItemsPrice)
.GroupBy(y => y. Price.item.Name)
.ToDictionary(y => y.Key, y => y.Sum(z => z.TotalPrice())),
new DescendingComparer());
注意:根据您的需要调整排序字典的键值和值类型以及比较器类型!
答案 1 :(得分:1)
无法保证项目存储在字典中的顺序。不要依赖它。从字典中检索项目时,可以在该点对其进行排序。
&#34;出于枚举的目的,字典中的每个项都被视为表示值及其键的KeyValuePair结构。返回项目的顺序未定义。&#34;
- MSDN
正如马库斯所指出的,如果您确实需要在字典中订购,请使用OrderedDictionary<,>
class或SortedDictionary<,>
class。