Aracılığıyla paylaş


Nasıl yapılır: gruplanmış birleşimler (C# Programlama Kılavuzu) gerçekleştirmek

Grup katıl, sıradüzensel veri yapıları üretmek için yararlıdır.Bu ikinci koleksiyonundan ilişkili öğeleri kümesiyle ilk koleksiyonundan her öğe çiftlerini.

Örneğin, bir sınıf veya Öğrenci adlı bir ilişkisel veritabanı tablo iki alanlar içerebilir: kimliği ve adı.Kurs adlı ikinci sınıf veya ilişkisel veritabanı tablo iki alanlar içerebilir: StudentId ve CourseTitle.Bir grup katıl bu iki veri kaynakları, Student.Id ve Course.StudentId, eşleşen üzerinde temel alan her Öğrenci, (Bu boþ olabilir) kurs nesnelerinin bir koleksiyonu ile gruplandıracaktır.

[!NOT]

İlk koleksiyonun her öğe grubu birleştirme ilişkili öğeleri ikinci koleksiyonunda bulunur ne olursa olsun sonuç kümesinde görüntülenir.İlişkili öğe bulunduğu durumlarda, söz konusu öğenin ilişkili öğelerin sırasını boştur.Sonuç Seçici her öğenin ilk koleksiyon, bu nedenle erişebilir.Bu ikinci koleksiyonunda eşleşme varsa ilk koleksiyonundan öğeleri erişemez bir grup birleştirme sonucu Seçici farklıdır.

Bu konudaki ilk örnek bir grup birleştirme gerçekleştirmek gösterilmiştir.İkinci örnek grubu birleştirme xml öğeleri oluşturmak için nasıl kullanılacağını gösterir.

Örnek

Bb397905.collapse_all(tr-tr,VS.110).gifGrup birleşim örneği

Aşağıdaki örnek türdeki nesnelerin grubunu birleştirme gerçekleştirir Person ve Pet göre Person eşleşen Pet.Owner özelliği.Her eşleşen öğeleri çifti üretir, Grup birleştirme Grup katıl olan bu örnekte ilk koleksiyonun her öğe için tek bir sonuç nesnesi üretir bir Person nesne.Olan bu örnekte karşılık gelen elemanları ikinci koleksiyonundan Pet nesneleri, bir koleksiyon gruplandırılır.Son olarak, anonim bir tür oluşan her eşleşen sonuç Seçici işlevi oluşturur Person.FirstName ve Pet nesneler.

        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:

Bb397905.collapse_all(tr-tr,VS.110).gifxml örneği oluşturmak için Grup Katıl

Grup birleşimler kullanarak xml oluşturmak için ideal LINQ to XML.Aşağıdaki örnek, önceki örnektekine benzer anonim türleri oluşturmak yerine, sonuç Seçici işlevi birleştirilmiş nesneleri temsil eden xml öğesi oluşturur.LINQ to XML hakkında daha fazla bilgi için, bkz. 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>

Kod Derleniyor

  • Yeni bir oluşturmak Console Application , proje Visual Studio.

  • Zaten bunlar yapılmayan, System.Core.dll ve System.Xml.Linq.dll için bir başvuru ekleyin.

  • Dahil System.Linq ve System.Xml.Linq ad.

  • Kopyalayıp altındaki program.cs dosyasına örnek kodu yapıştırın Main yöntemi.Bir kod satırını ekleyin Main , yapıştırdığınız yöntemini çağırmak için yöntem.

  • Programı çalıştırın.

Ayrıca bkz.

Görevler

Nasıl yapılır: iç birleşimler (C# Programlama Kılavuzu) gerçekleştirmek

Nasıl yapılır: sol dış birleşimler (C# Programlama Kılavuzu) gerçekleştirmek

Başvuru

Join

GroupJoin

Anonim türleri (C# Programlama Kılavuzu)

Kavramlar

Birleşim işlemleri

Anonim türleri (Visual Basic)

Diğer Kaynaklar

LINQ to XML