2017-12-26 6 views
0

Ich brauche einige syntaktische Hilfe mit einer Linq-Anweisung. Die Gesamtaussage ist lang und wählt gegen eine SQL Server-Datenbank aus, über die ich keine Entwurfskontrolle habe.Null, wenn Null in Linq Wählen

In meinem ausgewählten neuen Satz habe ich die folgende Spalte;

   on_Hand_Qty1 = (from x1 in Material_Locations 
          where x1.Material == j.Part_Number 
           && x1.Location_ID != "MSSICONSMT" 
          select x1.On_Hand_Qty ?? 0.0).Sum() 
          , 

In LINQPad bekomme ich einen Fehler von: Operator '??' kann nicht auf Operanden vom Typ 'double' und 'double' angewendet werden

Ich benutze das ?? weil es möglich ist, dass die Unterabfrage keine Datensätze zurückgibt. In diesem Fall sollte der Wert Null sein.

Ich habe versucht, den Wert auf (double) und (double?) Zu werfen, aber ich bekomme immer noch effektiv den gleichen Fehler. j

Ich mache eine ähnliche sub auf eine Spalte an anderer Stelle in der Aussage und es funktioniert gut;

    Consignment = (from x in Material_Locations 
            where x.Material == j.Part_Number 
             && x.Location_ID == "MSSICONSMT" 
            select(float?) x.On_Hand_Qty ?? 0.0).ToList() 

Was fehlt mir hier?

Danke!

+1

Sie wenden '?? 'auf eine Zeile an. Wenn die Abfrage keine Zeilen zurückgibt, konvertiert sie das Fehlen von Zeilen nicht in eine Null. – GSerg

Antwort

0

Danke für die Hilfe bei der Suche nach Referenzen. Ich konnte nicht herausfinden, wie man es googelt.

Diese Syntax scheint zu funktionieren.

    on_Hand_Qty1 = Material_Locations 
           .Where (ml => ml.Material == j.Part_Number && ml.Location_ID != "MSSICONSMT") 
           .Sum (ml => (double?)ml.On_Hand_Qty) ?? 0,