有很多Q &關於與我的問題相關的stackoverflow,但我不能推論出問題的推理和在這種情況下效果最好的解決方案;可空字段和SQL是空的問題
所以我有一個方法,允許您傳遞一個parentID,並根據價值記錄將被過濾使用LINQ查詢。數據庫中的字段允許NULL值。現在,如果我在where子句中使用==
運算符比較字段,則發出的sql是錯誤的(它不會使用IS NULL
進行比較),因此查詢會返回0結果。我用Object.Equals()
方法解決了這個問題。這工作,但現在我得到一個例外傳遞一個非NULL值,一個整數
無法創建一個類型'System.Object'的常量值。只有原始類型或枚舉類型在此上下文中受支持。
所以我寫了一個簡單的方法
using (TestEntities context = new Entities())
{
return from c in context.ItemMappings
where c.ParentID.Equals(parentID)
select new ItemDTO
{
ItemID = c.Item.ItemID,
ItemName = c.Item.ItemName,
ItemType = new ItemTypeDTO
{
TypeID = c.Item.Type.TypeID,
TypeName =c.Item.Type.TypeName
};
}
我會嘗試在一段時間,我知道通過看它,它會奏效。 順便說一句,我理解我會在SQL中得到同樣的問題的原因,但認爲LINQ引擎會根據我的價值發出正確的SQL。我對使用Object.Equals – 2013-03-25 16:11:43
時得到的異常有更多的困惑,我不確定該錯誤的特殊性;對我來說這是一個新的......不幸的是,EF並不希望在SQL查詢中進行這些優化。 – 2013-03-25 16:17:11