Я получаю ссылку на объект, которая не установлена, с таким кодом ниже. Проблема возникает, когда я добавляю DefaultIfEmpty()
, чтобы сделать левое соединение. Но мне нужно увидеть в отчете, что нет PLACE
для 4-го пункта lst1
.Запрос LINQ со списком <T> «Ссылка на объект не установлена в экземпляр объекта».
Как я могу получить строку, где PLACE
is null
? Вот мой пример кода из LinqPad.
Если вы раскомментируете строку: new ID(){id1 = 10152 , id2 = null}
, вы получите сообщение об ошибке.
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; }
}
Да, я нашел несколько подобных примеров, но никогда при начале запроса со списком , Вопрос разрешен Крисом. Решением является использование тройника на источнике itsef (plll). Linqpad также является плюсом этого вопроса. Спасибо всем. G. –
GYCO50