【问题标题】:Use "Sum" Into Select new class使用“Sum”进入选择新班级
【发布时间】:2014-02-10 16:49:17
【问题描述】:

我有一个返回公共类的 linq 查询。在选择新的我通过实体数据库访问属性巡航并添加值但跳转,除了它说的地方:

LINQ to Entities 无法识别方法的'System.String ToString()' 方法,并且该方法无法翻译成存储表达式。

问题出在哪里?我可以在 Linq 中导航。选择 linq 到 bd 导航属性真的吗?

我尝试了几种方法的 .Sum ,但我失败了。

我将不胜感激。

谢谢

  public class prueba
{
    public int Id { get; set; }
    public string Nombre { get; set; }
    public string Email { get; set; }
    public string Codigo { get; set; }
    public string Total { get; set; }

}
var result = db.cliente
                       .Where(p => !p.Baja.Value)
                       .Where(OperacionPedido(operacionPedid, numPedidos))
                       .Where(OperacionGastado(operacionTot, totGastado))
                       .Select(p => new prueba
                       {
                           Id = p.Id,
                           Nombre = p.Nombre + " " + p.Apellidos,
                           Email = p.Email,
                           Codigo = p.territorio1.Codigo_iso3166_3.Trim(),
                           Total = p.pedido.Sum(oo=>oo.Total.Value).ToString() 
                       }).OrderBy(p => p.Nombre)
                       .ToList();

【问题讨论】:

标签: c# linq select sum


【解决方案1】:

使用 SqlFunctions.StringConvert 而不是 ToString 所以你的 Sum 查询

Total = p.pedido.Sum(oo=>oo.Total.Value).ToString()

应该是:

Total = SqlFunctions.StringConvert(p.pedido.Sum(oo=>oo.Total.Value))

使用 Entity 框架的 LINQ 查询翻译成底层数据源语言,(在你的情况下可能是 SQL),并且 ToString 不能被实体框架翻译成 SQL。这就是提供SqlFunctions.StringConvert 的原因。

String 类型中存储数值不是一个好主意,相反,您应该在字段Total 中使用intdouble 类型。

【讨论】:

  • 唯一需要注意的是,SqlFunction 会将您(并且只能工作)与 SQL Server 联系起来。
  • 对的 Simon 和 Habib,也是很好的解决方案,但最后我会返回一个小数,我不会返回字符串。非常感谢
猜你喜欢
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-06
  • 2021-08-12
  • 2023-03-30
相关资源
最近更新 更多