Postupy: Provádění seskupených spojení (Průvodce programováním v C#)
Spojení skupiny je užitečný pro vytváření hierarchických datových struktur.Je dvojice každý prvek z kolekce první sadu wolframovým prvky z druhá kolekce.
Například třída nebo tabulky relační databáze s názvem Student obsahovat dvě pole: Id a název.Druhé třídy nebo relační databázové tabulky s názvem kurzu může obsahovat dvě pole: StudentId a CourseTitle.Skupina spojení těchto dvou údajů by skupiny zdrojů, založené na odpovídající Student.Id a Course.StudentId, každý Student s kolekci objektů kurzu (které mohou být prázdné).
[!POZNÁMKA]
Každý prvek kolekce první, zobrazí se v sadě výsledků skupiny spojení bez ohledu na to, zda je v druhá kolekce nalezeny wolframovým prvky.V případě, kdy jsou nalezeny žádné prvky wolframovým pořadí prvků wolframovým prvku je prázdný.Volič výsledek proto má přístup do každého prvku první kolekce.Tím se liší od volič výsledek při spojení mimo skupinu prvků nelze přístup z první kolekce, které nemají žádná shoda v druhá kolekce.
První příklad v tomto tématu ukazuje, jak provést spojení skupiny.Druhý příklad ukazuje, jak vytvořit prvky XML pomocí skupiny spojení.
Příklad
Příklad spojení skupiny
Následující příklad provádí spojení skupiny objektů typu Person a Pet na základě Person odpovídající Pet.Owner vlastnost.Na rozdíl od spojení-group by vyrábět dvojice prvků pro každý shoda, skupiny spojení vytváří pouze jeden výsledný objekt pro každý prvek první kolekce, která je v tomto příkladu Person objektu.Druhá kolekce odpovídajících prvků, které jsou v tomto příkladu Pet objekty jsou seskupeny do kolekce.Nakonec výsledek funkce modulu selector vytváří anonymní typ každého shoda, která se skládá z Person.FirstName a kolekce Pet objektů.
class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
class Pet
{
public string Name { get; set; }
public Person Owner { get; set; }
}
/// <summary>
/// This example performs a grouped join.
/// </summary>
public static void GroupJoinExample()
{
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 };
// Create a list where each element is an anonymous type
// that contains the person's first name and a collection of
// pets that are owned by them.
var query = from person in people
join pet in pets on person equals pet.Owner into gj
select new { OwnerName = person.FirstName, Pets = gj };
foreach (var v in query)
{
// Output the owner's name.
Console.WriteLine("{0}:", v.OwnerName);
// Output each of the owner's pet's names.
foreach (Pet pet in v.Pets)
Console.WriteLine(" {0}", pet.Name);
}
}
// This code produces the following output:
//
// Magnus:
// Daisy
// Terry:
// Barley
// Boots
// Blue Moon
// Charlotte:
// Whiskers
// Arlene:
Spojení skupiny vytvořit ukázkový kód XML
Spojení skupiny jsou ideální pro vytváření XML pomocí Technologie LINQ to XML.Následující příklad je podobný předchozímu příkladu namísto vytváření typů anonymní funkce modulu selector výsledek vytvoří elementy XML, které představují spojených objektů.Pro více informací o Technologie LINQ to XML si prohlédněte LINQ to XML.
class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
class Pet
{
public string Name { get; set; }
public Person Owner { get; set; }
}
/// <summary>
/// This example creates XML output from a grouped join.
/// </summary>
public static void GroupJoinXMLExample()
{
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 };
// Create XML to display the hierarchical organization of people and their pets.
XElement ownersAndPets = new XElement("PetOwners",
from person in people
join pet in pets on person equals pet.Owner into gj
select new XElement("Person",
new XAttribute("FirstName", person.FirstName),
new XAttribute("LastName", person.LastName),
from subpet in gj
select new XElement("Pet", subpet.Name)));
Console.WriteLine(ownersAndPets);
}
// This code produces the following output:
//
// <PetOwners>
// <Person FirstName="Magnus" LastName="Hedlund">
// <Pet>Daisy</Pet>
// </Person>
// <Person FirstName="Terry" LastName="Adams">
// <Pet>Barley</Pet>
// <Pet>Boots</Pet>
// <Pet>Blue Moon</Pet>
// </Person>
// <Person FirstName="Charlotte" LastName="Weiss">
// <Pet>Whiskers</Pet>
// </Person>
// <Person FirstName="Arlene" LastName="Huff" />
// </PetOwners>
Probíhá kompilace kódu
Vytvoření nového Aplikace konzoly projektu v Visual Studio.
Pokud již neexistuje odkaz přidáte odkaz na System.Core.dll a System.Xml.Linq.dll.
Zahrňte obory názvů System.Linq a System.Xml.Linq.
Zkopírujte a vložte kód z příkladu do souboru program.cs níže Main metoda.Přidání řádku kódu Main volat metodu vložené do metody.
Spusťte program.
Viz také
Úkoly
Postupy: Provádění vnitřních spojení (Průvodce programováním v C#)
Postupy: Provedení levých vnějších spojení (Průvodce programováním v C#)
Referenční dokumentace
Anonymní typy (Průvodce programováním v C#)