📰 来源: 博客园
AScript是一个开源的C#动态脚本解析执行引擎,支持扩展自定义语法。
在之前的文章《AScript如何实现LINQ语法》中实现了C#标准LINQ查询语法,但并不支持left join/right join语句,不过.NET10在Queryable/Enumerable中新增了LeftJoin/RightJoin扩展方法(LINQ查询语法中仍然不支持left join/right join写法)。
本篇将在LINQ语法的基础上增加left join和right join语法,以提高脚本灵活性。
一、left join
标准LINQ查询的左连接写法如下:
1 from p in context.Persons 2 join a in context.AddressInfos on p.Id equals a.UserId into aa 3 from a in aa.DefaultIfEmpty() 4 select new { p.Id, p.Name, p.Age, MyAddress = a.Address };
简化后的left join语法如下:
1 from p in context.Persons 2 left join a in context.AddressInfos on p.Id equals a.UserId 3 select new { p.Id, p.Name, p.Age, MyAddress = a.Address };
1、在QueryNode中添加AddLeftJoin方法
1 public void AddLeftJoin(string varName, ITreeNode source, ITreeNode key1, ITreeNode key2) 2 { 3 string name1 = $"___{varName}___"; 4 AddJoin(varName, source, key1, key2, name1); 5 AddFrom(varName, new CallFuncNode { Name = "DefaultIfEmpty", Args = new ITreeNode[] { new VariableNode(name1) } }); 6 }
可以看到,AddLeftJoin方法中我们手动增加了join ... into xxx和from ... xxx.DefaultIfEmpty()语句。
2、在FromTokenHandler中添加left join解析
1 public void🔗 原文链接: 点击阅读原文
文章评论