Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
DotNETFrameworkNotesForProfessionals.pdf
Скачиваний:
32
Добавлен:
20.05.2023
Размер:
1.82 Mб
Скачать

new Project { DeveloperId = 1,

Name = "Hello World 3D"

},

new Project { DeveloperId = 1,

Name = "Super Fizzbuzz Maker"

},

new Project { DeveloperId = 2,

Name = "Citizen Kane - The action game"

},

new Project { DeveloperId = 2,

Name = "Pro Pong 2016"

}

};

var denormalized = developers.Join( inner: projects, outerKeySelector: dev => dev.Id,

innerKeySelector: proj => proj.DeveloperId, resultSelector:

(dev, proj) => new { ProjectName = proj.Name, DeveloperName = dev.Name});

foreach(var item in denormalized)

{

Console.WriteLine("{0} by {1}", item.ProjectName, item.DeveloperName);

}

//Hello World 3D by Foobuzz //Super Fizzbuzz Maker by Foobuzz

//Citizen Kane - The action game by Barfizz //Pro Pong 2016 by Barfizz

Section 8.49: Left Outer Join

class Person

{

public string FirstName { get; set; } public string LastName { get; set; }

}

class Pet

{

public string Name { get; set; } public Person Owner { get; set; }

}

public static void Main(string[] args)

{

var magnus = new Person { FirstName = "Magnus", LastName = "Hedlund" }; var terry = new Person { FirstName = "Terry", LastName = "Adams" };

var barley = new Pet { Name = "Barley", Owner = terry };

var people = new[] { magnus, terry }; var pets = new[] { barley };

GoalKicker.com – .NET Framework Notes for Professionals

44

var query =

from person in people

join pet in pets on person equals pet.Owner into gj from subpet in gj.DefaultIfEmpty()

select new

{

person.FirstName,

PetName = subpet?.Name ?? "-" // Use - if he has no pet

};

foreach (var p in query) Console.WriteLine($"{p.FirstName}: {p.PetName}");

}

GoalKicker.com – .NET Framework Notes for Professionals

45