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

时间:2016-02-24 23:45:11

标签: c# asp.net-mvc linq string-formatting

我在LINQ上使用String格式时遇到问题,但只在我的Controller上运行,在我的视图上使用它很好,所以如何更改我的LINQ以避免在Controller中出错。

这是我的 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个数字,就像数百,数千和数百万现在我得到的日期平原没有格式。 我该怎么办?

1 个答案:

答案 0 :(得分:2)

您可以在分组后调用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方法(您将在此link中找到它们),String.Format不是其中之一。如果Decimal.Round受支持,则可以改为使用System.Math.Round