我在C#中执行LinQ查询,但我收到此错误:
System.Data.Entity.dll中出现“System.NotSupportedException”类型的异常,但未在用户代码中处理
其他信息:LINQ to不支持强制转换为Decimal 实体查询,因为所需的精度和比例信息 无法推断。
最近我在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;
}
HEJ和HPD是双倍的。
在“Cumplimiento”中我正在做:
Cumplimiento = (decimal)(q.HEJ == 0 ? 0 : ((q.HPD / q.HEJ) * 10) / 100),
Cumplimiento = Convert.ToDecimal((q.HEJ == 0 ? 0 : ((q.HPD / q.HEJ) * 10) / 100)),
Cumplimiento = (q.HEJ == 0 ? 0 : (((decimal)q.HPD / (decimal)q.HEJ) * 10) / 100),
Whitout任何结果,我真的需要一些帮助,谢谢。
答案 0 :(得分:2)
抱歉复活旧帖子。我在这里通过谷歌结束了,并希望至少给出一个有效的答案。
正如其他人所指出的那样,这通常是一个坏主意,你不应该盲目地在双倍和小数之间施放。要实际执行此操作,您需要首先将数据放入内存,因为无法在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;
}
答案 1 :(得分:-1)
double值无法自动转换为十进制。在使用十进制变量中的double值时显式使用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;