使用" Sum"进入选择新班级

时间:2014-02-10 16:49:18

标签: c# linq select sum

我有一个返回公共类的linq查询。在select new中,我访问一个属性Cruising through entities数据库并添加值,但跳转除了它所说的位置:

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();

1 个答案:

答案 0 :(得分:0)

使用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无法通过Entity框架转换为SQL。这就是提供SqlFunctions.StringConvert的原因。

String类型中存储数值不是一个好主意,而是应该为您的字段int使用doubleTotal类型。