Istnieje mnóstwo Q & A na stackoverflow związanych z moim pytaniem, ale nie mogę wydedukować rozumowania problemu i rozwiązania, które działa najlepiej w tym scenariuszu;Nullable Field i SQL Is Null Issue
Więc mam metodę, która pozwala przekazać parentID, a na podstawie rekordów wartości będą filtrowane przy użyciu kwerendy LINQ. Pole w bazie danych zezwala na wartości NULL. Teraz Jeśli porównasz pola przy użyciu operatora ==
w klauzuli where, wyemitowany sql jest niepoprawny (nie używa IS NULL
do porównania), a zatem zapytanie daje 0 wyników. Rozwiązałem to przy użyciu metody Object.Equals()
. To zadziałało, ale teraz otrzymuję wyjątek od podania wartości NON NULL, liczby całkowitej, która jest liczbą całkowitą
. Nie można utworzyć stałej wartości typu "System.Object" W tym kontekście obsługiwane są tylko typy pierwotne lub typy wyliczeniowe.
Więc napisałem prostą metodę
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
};
}
Postaram że na jakiś czas i wiem, patrząc na to, że będzie działać. BTW, rozumiem rozumowanie, że otrzymam ten sam problem w SQL, ale myślę, że silnik LINQ będzie emitował odpowiedni SQL na podstawie mojej wartości. Byłem bardziej zdezorientowany o wyjątku, który dostałem podczas korzystania z Object.Equals –
Nie jestem pewien szczególnych cech tego błędu; ten jest dla mnie nowy ... Niestety, EF nie zamierza tworzyć tego rodzaju optymalizacji zapytań SQL. –