.NET : LINQ之Join语法的思考
来源:互联网 发布:淘宝卖家怎么追加评论 编辑:程序博客网 时间:2024/05/17 08:46
我们知道,在LINQ 查询中,对於Join的操作,提供了三种不同的实现方式
- 内联接(INNER JOIN)
- 分组联接(GROUP JOIN)
- 左外联接(LEFT JOIN)
关于上面三种JOIN语法的详细介绍,请直接参考MSDN,这里我做一点简要的总结:
- 内联接,类似于SQL查询中的INNER JOIN。这个很好理解,只有JOIN的两端都匹配到的记录,才被返回。
- 分组联接,这个在SQL查询中并没有对应的版本。相当于是GROUP BY和JOIN的一个复合实现吧。这个设计的确不错。
- 左外联接,类似于SQL查询中的LEFT JOIN。意思就是说,即便JOIN的右侧不存在于与左侧相等的键值,左侧包含的记录也照样返回。
从上面的图可以看出来,既然左外联接可能发生的情况是:左侧存在的记录,在右侧找不到对应的联接记录。那么就应该为这种情况准备一个处理方案。在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 from xx in x.DefaultIfEmpty( new Customer() { CustomerID = "UnKnown", CompanyName = "UnKnown Company" }) join e in EmployeeTable.Select() on o.EmployeeID equals e.EmployeeID into y from yy in y.DefaultIfEmpty( new Employee() { EmployeeID = -1, Name = "UnKnown", City = City.北京 }) 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
我的思考是:
这个LEFT JOIN的语法还有无简化的可能性
SQL 中还有一种JOIN叫CROSS JOIN,目前在LINQ 应该如何实现呢?
由此我想到一个话题,就是这些LINQ的关键字能不能定制或者添加呢?这看起来有点古怪,但如果能实现,那倒是解决大问题了。
不知道大家的高见如何?
.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }
- .NET : LINQ之Join语法的思考
- 步步为营VS 2008 + .NET 3.5(5) - LINQ查询操作符之Select、Where、OrderBy、OrderByDescending、GroupBy、Join、GroupJoin及其对应的查询语法
- 步步为营VS 2008 + .NET 3.5(5) - LINQ查询操作符之Select、Where、OrderBy、OrderByDescending、GroupBy、Join、GroupJoin及其对应的查询语法
- Linq语句之 join 的用法
- LINQ之Join
- LINQ 之 JOIN(2)
- linq学习之join
- Linq之Join操作
- LINQ查询操作符之Select、Where、OrderBy、OrderByDescending、GroupBy、Join、GroupJoin及其对应的查询语法
- Linq 的 left join
- .NET中那些所谓的新语法之四:标准查询运算符与LINQ
- .NET中那些所谓的新语法之四:标准查询运算符与LINQ
- Linq 之 join on 查询
- Linq to DataTable之Join
- LINQ to OBJECT语句之Join操作符的使用
- .NET学习笔记3——linq的语法
- Linq 的Join多条件
- 【.Net码农】 Linq 左连接 left join
- 我又写了个空心的等边三角形
- 人的大脑如果可以认识本身,那它就复杂到了不可能被认知的地步
- 巧用mysql提示符prompt清晰管理数据库
- 传智播客Spring视频教程学习笔记1 2
- ADO数据库操作总结
- .NET : LINQ之Join语法的思考
- 全国电子设计赛论坛
- 构造函数初始化列表
- 字符串类型的Unicode码转化为中文
- Log4j.net 项目配置实例
- flex中如何获取系统时间
- Js改变css样式
- VC中使用CFileDialog进行文件操作
- 数据库设计原则