.NET : LINQ之Join语法的思考

我们知道,在LINQ 查询中,对於Join的操作,提供了三种不同的实现方式

  • 内联接(INNER JOIN)
  • 分组联接(GROUP JOIN)
  • 左外联接(LEFT JOIN)

关于上面三种JOIN语法的详细介绍,请直接参考MSDN,这里我做一点简要的总结:

  • 内联接,类似于SQL查询中的INNER JOIN。这个很好理解,只有JOIN的两端都匹配到的记录,才被返回。

image

  • 分组联接,这个在SQL查询中并没有对应的版本。相当于是GROUP BY和JOIN的一个复合实现吧。这个设计的确不错

 

  • 左外联接,类似于SQL查询中的LEFT JOIN。意思就是说,即便JOIN的右侧不存在于与左侧相等的键值,左侧包含的记录也照样返回。

image

 

从上面的图可以看出来,既然左外联接可能发生的情况是:左侧存在的记录,在右侧找不到对应的联接记录。那么就应该为这种情况准备一个处理方案。在SQL查询中,右侧如果找不到匹配的联接记录,则自动用NULL代替。

根据上面的原理,要在LINQ中要实现Left Join的功能,语法就会稍微复杂一些。大家可以先参考下面的例子,请注意红色的部分

                //联合查询三个表的资料
                Console.WriteLine("\t联合查询");
                var joinquery = from o in OrderTable.Select()
                                join c in CustomerTable.Select() on o.CustomerID equals c.CustomerID into x
                                
                                join e in EmployeeTable.Select() on o.EmployeeID equals e.EmployeeID into y
                                
                                select new
                                {
                                    OrderInfo = o,
                                    CustomerInfo = xx,
                                    EmployeeInfo = yy
                                };

                foreach (var item in joinquery)
                {
                    Console.WriteLine("\t" + item.OrderInfo);
                    Console.WriteLine("\t" + item.CustomerInfo);
                    Console.WriteLine("\t\t" + item.EmployeeInfo);
                }
【备注】该代码是正在开发的XML数据库演示程序的一个片段。如果对该项目有兴趣,请参考http://www.cnblogs.com/chenxizhang/archive/2009/08/09/1542354.html
我的思考是:
 
由此我想到一个话题,就是?这看起来有点古怪,但如果能实现,那倒是解决大问题了。
不知道大家的高见如何?
 
 
 

本文由作者: 陈希章 于 2009/8/10 9:01:48 发布在: 博客园,转载请注明出处

转载于:https://www.cnblogs.com/chenxizhang/archive/2009/08/10/1542595.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值