LINQ 控制器语句 MVC 上的字符串格式
String Format on LINQ controller statement MVC
我在我的 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 位数字,例如数百、数千和数百万,现在我得到没有格式的日期。
我能做什么?
您可以在分组依据之后调用 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
。
我在我的 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 位数字,例如数百、数千和数百万,现在我得到没有格式的日期。 我能做什么?
您可以在分组依据之后调用 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
。