LINQ(内连接和左外连接)

本文介绍了如何使用C#的LINQ进行内连接和左外连接操作。通过示例展示了如何合并赛车手冠军和车队冠军的数据,首先定义了两个查询分别获取赛车手和车队信息,然后利用join子句进行连接。内连接仅返回匹配的记录,而左外连接则返回左侧序列的所有元素,即使右侧没有匹配项。文中提供了两种不同的LINQ写法,并解释了GroupJoin与Join的区别,帮助理解数据连接的不同方式。
摘要由CSDN通过智能技术生成

使用join子句可以根据特定的条件合并两个数据源,但之前要获得两个要连接的列表。在一级方程式比赛中,有赛车手冠军和车队冠军。赛车手从GetChampions()方法中返回,车队从GetConstructorChampions()方法中返回。现在要获得一个年份列表,列出每年的赛车手冠军和车队冠军。

为此,先定义两个查询,用于查询赛车手和车队:

        static void InnerJoin()
        {
            var racers = from r in Formula1.GetChampions()
                       from y in r.Years
                       select new {
                           Year = y,
                           nameof= r.FirstName + " " + r.LastName
                       };
            var teams = from t in Formula1.GetConstructorChampions()
                        from y in t.Years
                        select new {
                            Year = y,
                            Name = t.Name
                        };
        }

有了这两个查询,在通过join子句,根据赛车手获得冠军的年份和车队获得冠军的年份进行连接。select子句定义了一个新的匿名类型,它包含Year、Racer和Team属性。

            var racersAndTeams = (from r in racers
                               join t in teams on r.Year equals t.Year
                               select new {
                                   Year = r.Year,
                                   Champion = r.Name,
                                   Contructor = t.Name
                               }).Take(10);
            System.Console.WriteLine("Year World Champion Contructor Title");
            foreach(var item in racersAndTeams)
            {
                System.Console.WriteLine($"{item.Year}: {item.Champion,-10} {item.Constructor}");
            }

当然,也可以把它们合并为一个LINQ查询,但这只是一种个人

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值