Я пытаюсь заставить это левое внешнее соединение работать, но, похоже, я сталкиваюсь с некоторыми проблемами. Я привел пример кода из MSDN left join article. Этот пример приведен в синтаксисе LINQ, но мне нужен мой синтаксис метода расширения, поэтому я также ссылался на этот вопрос SO.Ошибки внешнего внешнего соединения
Person magnus = new Person { FirstName = "Magnus", LastName = "Hedlund" };
Person terry = new Person { FirstName = "Terry", LastName = "Adams" };
Person charlotte = new Person { FirstName = "Charlotte", LastName = "Weiss" };
Person arlene = new Person { FirstName = "Arlene", LastName = "Huff" };
Pet barley = new Pet { Name = "Barley", Owner = terry };
Pet boots = new Pet { Name = "Boots", Owner = terry };
Pet whiskers = new Pet { Name = "Whiskers", Owner = charlotte };
Pet bluemoon = new Pet { Name = "Blue Moon", Owner = terry };
Pet daisy = new Pet { Name = "Daisy", Owner = magnus };
// Create two lists.
List<Person> people = new List<Person> { magnus, terry, charlotte, arlene };
List<Pet> pets = new List<Pet> { barley, boots, whiskers, bluemoon, daisy };
var query = people
.GroupJoin(pets,
p1 => p1.FirstName,
p2 => p2.Owner.FirstName,
(p1, p2) => new {p1,p2})
.SelectMany(x => x.p2.DefaultIfEmpty(),
(x, y) => new { FirstName = x.p1.FirstName, PetName = y.Name });
foreach (var v in query)
{
Console.WriteLine("{0,-15}{1}", v.FirstName + ":", v.PetName);
}
Мой запрос в основном идентичен коду я ссылочного, но я получаю эту ошибку:
NullReferenceException
Object reference not set to an instance of an object.
Это должно быть очень просто. Что я делаю не так?
Синтаксис запросов гораздо легче читать. Но чтобы ответить на ваш вопрос, прежде чем вы получите доступ к объекту в объекте (слева), вы должны проверить его на 'null'. (При использовании Linq2Sql это, однако, не требуется) – Magnus