Zip, Join, GroupJoin

Zip

合并兩個序列,產生一個新的對象序列,但連接方式是一对一的(即序列1和第一项连接序列2的第一项),所以最终结果会在较短的序列处终止。
Zip在這裏不是壓縮的意思,而是拉鏈,意爲連接兩個序列

            Person magnus = new Person { Name = "Hedlund, Magnus" };
            Person terry = new Person { Name = "Adams, Terry" };
            Person charlotte = new Person { Name = "Weiss, Charlotte" };

            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 daisy = new Pet { Name = "Daisy", Owner = magnus };

            List<Person> people = new List<Person> { magnus, terry, charlotte };
            List<Pet> pets = new List<Pet> { barley, boots, whiskers, daisy };

            var query = people.Zip(pets, (person, pet) => new { OwnerName = person.Name, Pet = pet.Name });

结果如下:
Hedlund, Magnus - Barley
Adams, Terry - Boots
Weiss, Charlotte - Whiskers

Join

合并兩個序列,產生一個新的對象序列,相當於内連接

            var query = people.Join(pets,
                            person => person,
                            pet => pet.Owner,
                            (person, pet) => new { OwnerName = person.Name, Pet = pet.Name });

            query = from person in people
                    join pet in pets on person equals pet.Owner
                    select new { OwnerName = person.Name, Pet = pet.Name };

結果如下:
Hedlund, Magnus - Daisy
Adams, Terry - Barley
Adams, Terry - Boots
Weiss, Charlotte - Whiskers

GroupJoin

合并兩個序列,產生一個分層的對象序列,序列中的每個元素都對應一個列表,這個方法在传统的关系数据库术语中没有直接的等效方法

            var query = people.GroupJoin(pets,
                            person => person,
                            pet => pet.Owner,
                            (person, petCollection) =>
                                new
                                {
                                    OwnerName = person.Name,
                                    Pets = petCollection.Select(pet => pet.Name)
                                });

            query = from person in people
                    join pet in pets on person equals pet.Owner into petCollection //其中petCollection是一個IEnumerable<Pet>
                    select new
                    {
                        OwnerName = person.Name,
                        Pets = petCollection.Select(pet => pet.Name)
                    };

結果如下:
> Hedlund, Magnus:
Daisy
> Adams, Terry:
Barley
Boots
> Weiss, Charlotte:
Whiskers

转载于:https://www.cnblogs.com/yetsen/p/5821463.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值