Ich bekomme eine 'Objektreferenz nicht gesetzt' mit dieser Art von Code unten. Problem tritt auf, wenn ich die DefaultIfEmpty()
hinzufügen, um eine linke Verknüpfung zu machen. Aber ich muss im Bericht sehen, dass es keine PLACE
für den 4. Artikel lst1
gibt. Wie kann ich eine Zeile erhalten, in der PLACE
null
ist? Hier ist mein Codebeispiel von LinqPad.LINQ-Abfrage mit Liste <T> "Objektverweis nicht auf eine Instanz eines Objekts festgelegt."
Wenn Sie die Zeile auskommentieren: new ID(){id1 = 10152 , id2 = null}
erhalten Sie den Fehler.
var Lst1 = new List<ID>
{
new ID(){id1 = 10152 , id2= 250},
new ID(){id1 = 10152 , id2 = 1},
new ID(){id1 = 10152 , id2= 106},
//new ID(){id1 = 10152 , id2 = null}
};
var Lst2 = new List<STORE>
{
new STORE() {sto1 = 10152 , sto2 = "General Store"}
};
var Lst3 = new List<PLACE>
{
new PLACE() {pla1 = 250 , pla2 = "London"},
new PLACE() {pla1 = 1 , pla2 = "Paris"},
new PLACE() {pla1 = 106 , pla2 = "Miami"}
};
var regsup =
(from l in Lst1
join st in Lst2 on l.id1 equals st.sto1
join pl in Lst3 on l.id2 equals pl.pla1 into pll
from plll in pll.DefaultIfEmpty()
select new
{
StoID = st.sto1,
Store = st.sto2,
PlaceID = plll.pla1,
Place = plll.pla2
}).Distinct();
regsup.Dump();
}
class ID
{
public decimal id1 { get; set; }
public decimal? id2 { get; set; }
}
class STORE
{
public decimal sto1{ get; set; }
public string sto2{ get; set; }
}
class PLACE
{
public decimal pla1{ get; set; }
public string pla2{ get; set; }
}
Ja ich einige ähnliche Beispiele gefunden, aber nie, wann beginnen die Abfrage mit einer Liste . Frage wurde im folgenden von Chris gelöst. Die Verwendung des Ternärs auf der Quelle itsef (plll) ist die Lösung. Linqpad ist auch das Plus dieser Frage. Danke an Alle. G. –
GYCO50