Udostępnij za pośrednictwem


Porady: obsługa wartości zerowych w wyrażeniach kwerend (Przewodnik programowania w języku C#)

W tym przykładzie przedstawiono sposób obsługiwać możliwe wartości null w kolekcjach źródła.Kolekcja obiektów takich jak IEnumerable może zawierać elementy, których wartość jest null.Jeśli kolekcji źródłowej jest zerowy lub zawiera element, którego wartością jest null, a kwerenda nie obsługuje wartości null, NullReferenceException będą generowane podczas wykonywania kwerendy.

Przykład

Można obronie kodu do uniknięcia wyjątek odwołania zerowego, jak pokazano w następującym przykładzie:

var query1 =
    from c in categories
    where c != null 
    join p in products on c.ID equals
        (p == null ? null : p.CategoryID)
    select new { Category = c.Name, Name = p.Name };

W poprzednim przykładzie where klauzuli odfiltrowuje wszystkie elementy null w kolejności kategorii.Technika ta jest niezależna od null wyboru w klauzuli join.Wyrażenie warunkowe z wartością null w tym przykładzie działa, ponieważ Products.CategoryID jest typu int? które jest skróconą formą Nullable<int>.

W klauzuli join jeśli tylko jeden z klawiszy porównanie jest typem wartości NULL można rzutować inne typu null w wyrażeniu kwerendy.W poniższym przykładzie założono, że EmployeeID jest kolumna zawierająca wartości typu int?:

void TestMethod(Northwind db)
{
    var query =
        from o in db.Orders
        join e in db.Employees
            on o.EmployeeID equals (int?)e.EmployeeID
        select new { o.OrderID, e.FirstName };
}

Zobacz też

Informacje

Typy dopuszczające wartości zerowe (Przewodnik programowania w języku C#)

Nullable

Koncepcje

Wyrażenia kwerend LINQ (Przewodnik programowania w języku C#)