LINQ 控制器语句 MVC 上的字符串格式

本文关键字:字符串 格式 MVC 控制器 语句 LINQ | 更新日期: 2023-09-27 18:36:02

im在我的LINQ

上使用字符串格式时遇到问题,但仅在我的控制器上,在我的视图上使用它效果很好,所以我如何更改我的LINQ以免在控制器中出现错误。

这是我的 LINQ

foreach (var item in db.Pos.Where(r => r.Fecha.Day.ToString() == "2").Select(g => new { Pdv = g.Pdv, Total = g.Total })
                                                      .GroupBy(l => l.Pdv).Select(z => new { Pdv = 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;

我想要的是 ViewBag.GroupS 的数据得到","每 3 位数字,就像数百、数千和数百万现在我得到的日期没有格式。我能做什么?

LINQ 控制器语句 MVC 上的字符串格式

您可以在组之后调用AsEnumerable扩展方法,以使用 Linq to Objects 而不是 Linq to Entities 来执行 Select 方法:

.GroupBy(l => l.Pdv)
.AsEnumerable()// Add this
.Select(z => new { Pdv = z.Key, Total = String.Format("{0:$#,##0.00;($#,##0.00);Zero}",Decimal.Round(z.Sum(l => l.Total), 0) })

这是因为 Linq 提供程序不知道如何将方法调用转换为正确的表达式树,稍后需要将其转换为 SQL 语句。目前支持一些string方法(您将在此链接中找到它们),String.Format不是其中之一。如果支持Decimal.Round,则可以改用System.Math.Round