初识LINQ中的Expression表达式树
在上文中给C#菜鸟们介绍了《C#的delegate/event/Action/Func/Predicate关键字》和《C#4.0的dynamic和var及object关键字辨析》,今天继续说一下LINQ Expressions。
在.NET3.0之后,可以使用LINQ表达式,即from a in set where a.x == y select a之类的表达,实质就是编译器对IQueryable对象提供的特定的关键词支持。
具体可以参考《System.Linq.Expressions 命名空间》和《Building LINQ Queries at Runtime in C#》
在 LINQ 中,表达式树用于表示针对数据源的结构化查询,这些数据源实现 IQueryable(Of T)。例如,LINQ to SQL 提供程序实现 IQueryable(Of T) 接口,用于查询关系数据存储。C# 和 Visual Basic 编译器会将针对此类数据源的查询编译为代码,该代码在运行时将生成一个表达式树。然后,查询提供程序可以遍历表达式树数据结构,并将其转换为适合于数据源的查询语言。表达式树还可以用在 LINQ 中,用于表示分配给类型为 Expression(Of TDelegate) 的变量的 Lambda 表达式。表达式树还可用于创建动态 LINQ 查询。有关更多信息,请参见如何:使用表达式树来生成动态查询。如果要生成 LINQ 提供程序,您也可以使用表达式树。
在LINQ中,我们使用LINQ查询表达式来从数据库中获取数据,很显示,数据库并不认识LINQ语法,它只认识SQL语句,这时表达式树就派上用场了,它将LINQ查询表达式解析成一个数据结构,再对数据结构进行分析,进而组合成SQL数据库需要的SQL语句。
简单例子1:
1: using System.Linq.Expressions;
2:
3: Expression<Func<Student, bool>> expression = r => r.Graduate == 1 && r.Name == "Jacky";
4: Func<Student, bool> d = expression.Compile();
5: bool result = d(new Student { Name = "Tummy", Graduate = 2 });
6: Console.WriteLine(result + " -- this is linq expression result");
简单例子2:
1: static void RaiseSomePropChanged<T>(Expression<Func<T>> propertyExpression)
2: {
3: Func<T> d = propertyExpression.Compile();
4: T result = d();
5: Console.WriteLine(result );
6: }
7:
8: RaiseSomePropChanged(() => "abc");
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
2008-03-11 开发人员的编程习惯,单元测试意识与软件质量