C# 转换为值类型';Int32';失败
我有以下代码。我得到一个错误: 转换为值类型“System.Int32”失败,因为具体化的值为null。结果类型的泛型参数或查询必须使用可为空的类型C# 转换为值类型';Int32';失败,c#,asp.net-mvc,linq,lambda,C#,Asp.net Mvc,Linq,Lambda,我有以下代码。我得到一个错误: 转换为值类型“System.Int32”失败,因为具体化的值为null。结果类型的泛型参数或查询必须使用可为空的类型 var productItem=来自销售 在db.Sales\u inv\u详细信息中 选择新{ sales.sales\u Invoices.Customer.Cust\u Id, sales.sales\u Invoices.Customer.Customer\u Name, sales.sales\u Invoices.Employe.Emp
var productItem=来自销售
在db.Sales\u inv\u详细信息中
选择新{
sales.sales\u Invoices.Customer.Cust\u Id,
sales.sales\u Invoices.Customer.Customer\u Name,
sales.sales\u Invoices.Employe.Emp\u Name,
sales.sales\u Invoices.Employe.Emp\u代码,
销售。销售发票。日期发票,
sales.Item.Item_ID,
销售数量,
销售数量价格,
sales.Item.Item_名称,
sales.Item.Item_代码,
单位度量=sales.Item.TBL\u单位度量代码,
sales.sales_Invoices.Descrption,
sales.disc};
productItem=productItem
其中(x=>(x.Date\u发票>=型号Fromdate&x.Date\u发票(x.Emp\u代码==型号Emp\u代码));
将数据库字段映射到模型似乎是错误的。
可能您的模型中有
int
属性,但数据库中的int?
中有一个实体类上的属性定义为int
(System.Int32
),但数据库中有一个null
值。由于int
不能为null
,因此出现此错误
要解决此问题,请确保数据库查询不返回空值,或者将属性定义更改为可为空的整数(int?
或nullable
)
要在数据库中找到相应的记录,请尝试在SQL Management Studio中重新创建查询(即设置相同的“WHERE过滤器”),并检查应包含整数值的空列的结果。听起来您的模型将其中一个属性定义为不可空,但数据库将相应的列定义为可空,并且其中包含空值。当生成的读取器尝试填充模型时,BOOM。遗憾的是,我们无法告诉您是哪一个属性属性,它甚至不需要是该代码中提到的属性之一,因为它可以是
Sales\u inv\u details
表示的任何内容的FrobNumber
属性
您需要非常仔细地检查您的模型。从
Sales\u inv\u details
表示的任何属性/列开始。当您发现不匹配时:将其标记为可空,然后重试。没有实体模型很难判断,但当查询涉及一些左外部联接时,通常会发生此异常de>,因此,尽管如果不在右侧(可选)包含null
检查,LINQ to Entities不会生成NRE,但它要求您在投影内部将不可为null的值类型升级为可为null的值类型
检查以下一些关系:sales.sales\u Invoices
,sales.sales\u Invoices.Customer
,sales.sales\u Invoices.Employe
,sales.Item.TBL\u Unit\u Measure
。如果某些右端属性是可选的,请确保在投影,即如果您有int
属性,请在select子句中使用=(int?..
(或C#6?。
运算符)
另外,异常消息表示Int32
,因此请关注int
列。尝试使用
- (国际?)
- (p.property==null)?0:p.property
什么变量是空的?您调试过吗?您的模型是什么样子的?我甚至找不到我的空变量我在使用foreach(productItem中的var项)时遇到此错误但我猜这是描述和单位度量。调试时,仔细检查productItem中的项目,您会发现空变量。Just focusI有时也会出现此错误,但从未理解此错误的原因,但现在我得到了答案。感谢您的精彩解释
var productItem = from sales
in db.Sales_inv_details
select new {
sales.Sales_Invoices.Customer.Cust_Id,
sales.Sales_Invoices.Customer.Customer_Name,
sales.Sales_Invoices.Employe.Emp_Name,
sales.Sales_Invoices.Employe.Emp_code,
sales.Sales_Invoices.Date_invoice,
sales.Item.Item_ID,
sales.Qty,
sales.Qty_Price,
sales.Item.Item_Name,
sales.Item.Item_Code,
Unit_Measure = sales.Item.TBL_Unit_Measure.Code,
sales.Sales_Invoices.Descrption,
sales.disc };
productItem = productItem
.Where(x => (x.Date_invoice >= model.Fromdate & x.Date_invoice <= (model.Todate)));
productItem = productItem
.Where(x => (x.Emp_code == model.Emp_code));