Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在LinQ查询中将双精度转换为十进制_Linq_Silverlight_Service_Ria - Fatal编程技术网

在LinQ查询中将双精度转换为十进制

在LinQ查询中将双精度转换为十进制,linq,silverlight,service,ria,Linq,Silverlight,Service,Ria,我正在用C进行LinQ查询,但我遇到了以下错误: System.Data.Entity.dll中出现“System.NotSupportedException”类型的异常,但未在用户代码中处理 其他信息:LINQ to中不支持转换为十进制 实体查询,因为需要精度和比例信息 无法推断 最近,我在我的Lightswitch应用程序中创建了一个RIA服务,我想得到一个简单的操作 public class Reporte_HorasporCliente { [Key] public in

我正在用C进行LinQ查询,但我遇到了以下错误:

System.Data.Entity.dll中出现“System.NotSupportedException”类型的异常,但未在用户代码中处理

其他信息:LINQ to中不支持转换为十进制 实体查询,因为需要精度和比例信息 无法推断

最近,我在我的Lightswitch应用程序中创建了一个RIA服务,我想得到一个简单的操作

public class Reporte_HorasporCliente
{
    [Key]
    public int ID { get; set; }
    public string Cliente { get; set; }
    public double HPD { get; set; }
    public double? HPG { get; set; }
    public double? HAP { get; set; }
    public double? HCL { get; set; }
    public double? HEP { get; set; }
    public double? HEJ { get; set; }
    public double? HFT { get; set; }
    public double? HPP { get; set; }
    public double? Saldo { get; set; }
    public decimal? Cumplimiento { get; set; }
    public DateTime FechaOrden { get; set; }
}

public IQueryable<Reporte_HorasporCliente> getReporteHrsCliente()
    {
        var query = from q in this.Context.DetalleOrdenCompras
                    select new Reporte_HorasporCliente
                    {
                        ID = q.Id,
                        Cliente = q.OrdenCompra.Cliente.Nombre,
                        HAP = q.HAP,
                        HCL = q.HCL,
                        HEJ = q.HEJ,
                        HEP = q.HEP,
                        HFT = q.HFT,
                        HPD = q.HPD,
                        HPG = q.HPG,
                        HPP = q.HPD - q.HPG,
                        Saldo = q.HPD - q.HEJ,
                        FechaOrden = q.OrdenCompra.FechaOrden,
                        Cumplimiento = (q.HEJ == 0 ? 0 : ((q.HPD / q.HEJ) * 10) / 100),
                    };
        return query;
    }

如果没有任何结果,我真的需要一些帮助,谢谢。

双精度值不能自动转换为十进制。在十进制变量中分配双精度值时,显式使用Convert.ToDecimal方法。应按如下方式更新代码:

  var query = from q in this.Context.DetalleOrdenCompras
                select new Reporte_HorasporCliente
                {
                    ID = q.Id,
                    Cliente = q.OrdenCompra.Cliente.Nombre,
                    HAP = q.HAP,
                    HCL = q.HCL,
                    HEJ = q.HEJ,
                    HEP = q.HEP,
                    HFT = q.HFT,
                    HPD = q.HPD,
                    HPG = q.HPG,
                    HPP = q.HPD - q.HPG,
                    Saldo = q.HPD - q.HEJ,
                    FechaOrden = q.OrdenCompra.FechaOrden,
                    Cumplimiento = Convert.ToDecimal( (q.HEJ == 0 ? 0 : ((q.HPD / q.HEJ) * 10) / 100)),
                };
    return query;

很抱歉,恢复了一个旧线程。我通过谷歌在这里结束,并希望给出一个至少可行的答案

正如其他人所指出的,这通常是一个坏主意,您不应该盲目地在double和decimal之间转换。要真正做到这一点,您需要首先将数据放入内存,因为转换不能在sql中完成

public IQueryable<Reporte_HorasporCliente> getReporteHrsCliente()
    {
        var query = (from q in this.Context.DetalleOrdenCompras
                    select new
                    {
                        ID = q.Id,
                        Cliente = q.OrdenCompra.Cliente.Nombre,
                        HAP = q.HAP,
                        HCL = q.HCL,
                        HEJ = q.HEJ,
                        HEP = q.HEP,
                        HFT = q.HFT,
                        HPD = q.HPD,
                        HPG = q.HPG,
                        HPP = q.HPD - q.HPG,
                        Saldo = q.HPD - q.HEJ,
                        FechaOrden = q.OrdenCompra.FechaOrden,
                      }).ToList()
                      .Select(q => new Reporte_HorasporCliente 
                                   {
                        ID = q.ID,
                        Cliente = q.Cliente,
                        HAP = q.HAP,
                        HCL = q.HCL,
                        HEJ = q.HEJ,
                        HEP = q.HEP,
                        HFT = q.HFT,
                        HPD = q.HPD,
                        HPG = q.HPG,
                        HPP = q.HPP,
                        Saldo = q.Saldo,
                        FechaOrden = q.FechaOrden,
                        Cumplimiento = (decimal)((q.HEJ == 0 ? 0 : ((q.HPD / q.HEJ) * 10) / 100)),
                 });
        return query;
    }

旁注:在双精度和十进制之间进行任意方向的转换通常是个坏主意。这表明一方或另一方选择了不合适的数据类型。甚至不接近最佳解决方案,但如果您现在真的需要它,我建议您尝试Cumplimiento=Decimal.Parseq.HEJ==0?0:q.HPD/q.HEJ*10/100.对不起,我漏了一个括号。这就是:Cumplimiento=Decimal.Parseq.HEJ==0?0:q.HPD/q.HEJ*10/100.ToString同一错误System.Data.Entity.dll中出现“System.NotSupportedException”类型的异常,但未在用户代码中处理其他信息:LINQ to Entities无法识别“System.Decimal ParseSystem.String”方法,并且此方法无法转换为存储表达式。我使用了Cumplimiento=Convert.ToDecimalq.HEJ==0?0:q.HPD/q.HEJ*10/100,没有任何结果,显示相同的错误。
public IQueryable<Reporte_HorasporCliente> getReporteHrsCliente()
    {
        var query = (from q in this.Context.DetalleOrdenCompras
                    select new
                    {
                        ID = q.Id,
                        Cliente = q.OrdenCompra.Cliente.Nombre,
                        HAP = q.HAP,
                        HCL = q.HCL,
                        HEJ = q.HEJ,
                        HEP = q.HEP,
                        HFT = q.HFT,
                        HPD = q.HPD,
                        HPG = q.HPG,
                        HPP = q.HPD - q.HPG,
                        Saldo = q.HPD - q.HEJ,
                        FechaOrden = q.OrdenCompra.FechaOrden,
                      }).ToList()
                      .Select(q => new Reporte_HorasporCliente 
                                   {
                        ID = q.ID,
                        Cliente = q.Cliente,
                        HAP = q.HAP,
                        HCL = q.HCL,
                        HEJ = q.HEJ,
                        HEP = q.HEP,
                        HFT = q.HFT,
                        HPD = q.HPD,
                        HPG = q.HPG,
                        HPP = q.HPP,
                        Saldo = q.Saldo,
                        FechaOrden = q.FechaOrden,
                        Cumplimiento = (decimal)((q.HEJ == 0 ? 0 : ((q.HPD / q.HEJ) * 10) / 100)),
                 });
        return query;
    }