[英]The cast to value type 'Int32' failed
我有以下代碼。 我收到錯誤:
轉換為值類型'System.Int32'失敗,因為實現的值為null。 結果類型的泛型參數或查詢必須使用可空類型。
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));
聽起來您的模型將其中一個屬性定義為非可空,但數據庫將相應的列定為可為空,並且其中包含空值。 當生成的閱讀器嘗試填充模型時,BOOM。 不幸的是,我們無法告訴您哪個屬性,它甚至不需要是該代碼中提到的屬性之一,因為它可能是Sales_inv_details
代表的FrobNumber
屬性。
您需要非常仔細地檢查您的模型。 從Sales_inv_details
表示的屬性/列開始。 找到不匹配項后:將其標記為可為空,然后重試。
其中一個Entity類的屬性之一定義為int
( System.Int32
),但在數據庫中是null
值。 由於int
不能為null
因此會出現此錯誤。
要解決此問題,請確保數據庫查詢不返回空值,或將屬性定義更改為可以為null的整數( int?
或Nullable<int>
)。
要在數據庫中查找相應的記錄,請嘗試在SQL Management Studio中重新創建查詢(即設置相同的“WHERE過濾器”),並檢查應包含整數值的空列的結果。
看起來錯誤的將db字段映射到模型。 可能你的模型中有int
屬性,但int?
在數據庫中
沒有實體模型很難分辨,但是當查詢涉及一些left outer join
,通常會發生此異常,因此如果您沒有為右(可選)端包含null
檢查,LINQ to Entities不會生成NRE,要求您在投影內將非可空值類型提升為可空。
檢查下面的一些關系: sales.Sales_Invoices
, sales.Sales_Invoices.Customer
, sales.Sales_Invoices.Employe
, sales.Item
, sales.Item.TBL_Unit_Measure
。 如果某些右端屬性是可選的,請確保在投影中包含強制轉換為相應的可空類型,即如果您有int
屬性,請在select子句中使用= (int?)..
(或C#6 ?.
運營商)。
PS異常消息指示Int32
,因此專注於int
列。
嘗試通過使用來處理生成的空值/現有的空值
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.