2016-06-12 23 views
0

LINQ verbinden einen Fehler geben, während des unter Verwendung von linqlinq Entitäten dezimal Null-Werte von den äußeren

var data = (from p in _context.Products 
        from invp in _context.Inventories 
        .Where(inv=>inv.Product.ID== p.ID) 
        .DefaultIfEmpty()//left outer join 
        select new { p.ID, p.Name, p.BarCode, p.ProductCategory, p.MRP, p.RetailPrice,stock=invp.Stock }).ToList() ; 

Die gegossenen zu Werttyp System.Decimal fehlgeschlagen, weil der materialisierten Wert null ist. Entweder der generische Parameter des Ergebnistyps oder die Abfrage müssen einen Nullwerttyp verwenden.

Wenn ich invp.stock von der Auswahl entfernen, funktioniert es, wie kann ich invp.stock auf 0 setzen, wenn es null ist.

Antwort

0

Sie mögen diese auswählen:

ersetzen
stock=invp.Stock 

mit

stock=invp.Stock ?? 0 
+0

Danke..aber es gibt Compiler Fehler Op Erator '??' Kann nicht auf Operanden vom Typ 'dezimal' und 'int' angewendet werden. – user3658516

+0

Oh, tut mir leid, dass dies in der aktuellen MVC 4 nicht akzeptiert werden kann. –

+0

Ich dachte 'Fall wenn' wäre die bessere Lösung in SQL für diesen Fall, aber wie Sie LINQ verwenden. Es könnte ein bisschen schwierig sein. –

0

Es Nullable-dezimal ist und wir brauchen sie werfen dann nur kann er die Datenbank null C#

nehmen

Stock = (dezimal?) Invp.Stock