在LinQ查询中将双精度转换为十进制
我正在用C进行LinQ查询,但我遇到了以下错误: System.Data.Entity.dll中出现“System.NotSupportedException”类型的异常,但未在用户代码中处理 其他信息:LINQ to中不支持转换为十进制 实体查询,因为需要精度和比例信息 无法推断 最近,我在我的Lightswitch应用程序中创建了一个RIA服务,我想得到一个简单的操作在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
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;
}