在 LinQ 上按总价值排序

Order by Total Value on LinQ

我想订购我的 Linq GroupBy 语句,但总降序较多的项目我做不到

这是我的LinQ

foreach (var item in db
                    .Pos.Where(r => r.Fecha.Day <= today.Day)
                    .Select(g => new { Pdv = g.Pdv, Total = g.Total })
                    .GroupBy(l => l.Pdv)
                    .AsEnumerable()
                    .Select(z => new { 
                         Punto_De_Venta=z.Key,
                         Total = String.Format("{0:$#,##0.00;($#,##0.00);Zero}",
                                     Decimal.Round(z.Sum(l => l.Total), 0))
                    }))
{
    listadepuntos.Add(item.ToString());
}
var grupoPdv = new SelectList(listadepuntos.ToList());        
ViewBag.GroupS = grupoPdv;

我的 Linq 语句的输出是:

Punto_De_Venta = Central, Total = 42,143.00
Punto_De_Venta = Restaurante, Total = 189,949.00
Punto_De_Venta = Venta Moto, Total = 89,678.00

我正在寻找的输出是:

Punto_De_Venta = Restaurante, Total = 189,949.00
Punto_De_Venta = Venta Moto, Total = 89,678.00
Punto_De_Venta = Central, Total = 42,143.00

我该怎么做??我找不到制作这个的方法

List<> 确实保证排序,在传递给您的 SelectList

之前对列表进行排序
var grupoPdv = new SelectList(listadepuntos.OrderByDescending(l=>l.Total).ToList());
ViewBag.GroupS = grupoPdv;

另一种方法:

将源查询修改为return排序列表。

var results = db.Pos.Where(r => r.Fecha.Day <= today.Day)
    .Select(g => new { Pdv = g.Pdv, Total = g.Total })
    .GroupBy(l => l.Pdv).AsEnumerable()
    .Select(z => new { Punto_De_Venta=z.Key, Total = String.Format("{0:$#,##0.00;($#,##0.00);Zero}", Decimal.Round(z.Sum(l => Total), 0))})
    .OrderByDescending(l=>l.Total)  
    .ToList();

获得排序后的列表后,您可以使用排序后的结果创建 SelectList

var grupoPdv = new SelectList(result);
ViewBag.GroupS = grupoPdv;

您需要执行以下操作:

foreach (var item in db.Pos.Where(r => r.Fecha.Day <= today.Day)
                           .Select(g => new { Pdv = g.Pdv, Total = g.Total })
                           .GroupBy(l => l.Pdv)
                           .AsEnumerable()
                           .Select(z => new { Punto_De_Venta = z.Key, Total = z.Sum(l => l.Total) })
                           .OrderByDescending(r => r.Total)
                           .Select(r => new { Punto_De_Venta = r.Punto_De_Venta, Total = String.Format("{0:$#,##0.00;($#,##0.00);Zero}", Decimal.Round(z.Sum(l => l.Total), 0))})
{
    listadepuntos.Add(item.ToString());
}