3 Stimmen

Problem mit Linq Left Join

Ich habe eine Reihe von Beispielen dazu gesehen, aber sie in diesem Beispiel zu reproduzieren scheint nicht zu funktionieren. Hat jemand eine Idee, was mit dem folgenden Code falsch ist....

    var products = new[]
    { 
        new {ProductName ="Soda", Category = "Getränke"},
        new {ProductName ="Thunfisch", Category = "Meeresfrüchte"},
        new {ProductName ="Marmelade", Category = "Gewürz"}
    };

    var categories = new[]
    { 
        new {Category = "Getränke", Description="Schlürfen"},
        new {Category = "Meeresfrüchte" , Description="Knabbern"},
        new {Category = "Exotisch" , Description="Scharf!"},
    };

    var q = from c in categories
                 join p in products on c.Category equals p.Category into tmp
                 from prd in tmp.DefaultIfEmpty()
                 select new { Category = c.Category, 
                              Description = c.Description,        
                              ProductName = prd.ProductName };

Vielen Dank im Voraus

Keith

1voto

Fredrik Mörk Punkte 151006

Das Problem ist, dass es kein Produkt in der Kategorie "Exotisch" gibt, daher wird eine NullReferenceException geworfen, wenn versucht wird, den Produktnamen zu lesen (in der letzten Codezeile).

Um zu verhindern, dass der Code abstürzt, können Sie eine Nullprüfung hinzufügen:

var q = from c in categories
        join p in products on c.Category equals p.Category into tmp
        from prd in tmp.DefaultIfEmpty()
        select new
        {
            Category = c.Category,
            Description = c.Description,
            ProductName = prd != null ?  prd.ProductName : "[null]"
        };

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X