Esistono tonnellate di Q & A su stackoverflow correlate alla mia domanda, ma non è possibile dedurre il ragionamento del problema e la soluzione che funziona meglio in questo scenario;Nullable Field e SQL Is Null Numero
Quindi ho un metodo che consente di passare un parentID e in base al valore i record verranno filtrati utilizzando una query LINQ. Il campo nel database consente valori NULL. Ora Se si confrontano i campi utilizzando l'operatore ==
nella clausola where, sql emesso è errato (non utilizza IS NULL
per il confronto) e quindi i risultati della query 0 risultano. Ho risolto questo problema utilizzando il metodo Object.Equals()
. Ha funzionato, ma ora ottengo un'eccezione passando un valore NON NULL, un numero intero
Impossibile creare un valore costante di tipo 'System.Object'. In questo contesto sono supportati solo tipi primitivi o tipi di enumerazione.
così ho scritto un semplice metodo di
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
};
}
Cercherò che da un po ', e so, cercando in esso che funzionerà. BTW, capisco il ragionamento che otterrò lo stesso problema in SQL, ma pensavo che il motore LINQ emettesse il giusto SQL in base al mio valore. Sono stato più confuso sull'eccezione che ho ottenuto durante l'utilizzo di Object.Equals –
Non sono sicuro delle particolarità di tale errore; quello è nuovo per me ... Sfortunatamente EF non cerca di fare questo tipo di ottimizzazioni nelle query SQL. –