动态|如何完成复杂查询的动态构建?( 六 )


Expression<Func< int, bool>> JoinSubFilters(Func<Expression, Expression, Expression> expJoiner, paramsExpression<Func< int, bool>>[] subFilters) {// xvarpExp = Expression.Parameter( typeof( int), "x"); varresult = subFilters[ 0]; foreach( varsub insubFilters[ 1..]) {varleftExp = result.Unwrap(pExp); varrightExp = sub.Unwrap(pExp); varbodyExp = expJoiner(leftExp, rightExp);
result = Expression.Lambda<Func< int, bool>>(bodyExp, pExp); }
returnresult; }}
总结
如果逻辑关系更复杂 , 有多层嵌套像树形一样 , 比较方法也很多花样 , 甚至包含方法 , 怎么办?
可以参考以下示例:

  • https://github.com/newbe36524/Newbe.Demo/tree/main/src/BlogDemos/Newbe.ExpressionsTests/Newbe.ExpressionsTests/FilterFactory
如果你对此内容感兴趣 , 还可以浏览我之前录制的视频进行进一步了解:
  • 戏精分享 C#表达式树 , 第一季
  • https://www.bilibili.com/video/BV15y4y1r7pK
  • 戏精分享 C#表达式树 , 第二季
  • https://www.bilibili.com/video/BV1Mi4y1L7oR
你也可以参阅之前一篇入门:
  • 《只要十步 , 你就可以应用表达式树来优化动态调用》
  • https://www.newbe.pro/Newbe.Claptrap/Using-Expression-Tree-To-Build-Delegate/index.html
或者看MSDN文档 , 我觉得你也可以有所收获:
这篇相关的代码 , 可以通过以下地址得到:
  • https://github.com/newbe36524/Newbe.Demo/blob/main/src/BlogDemos/Newbe.ExpressionsTests/Newbe.ExpressionsTests/Examples/Z01SingleWhereTest.cs
如果你觉得本文不错 , 记得收藏、点赞、评论、转发 。 告诉我还想知道点什么哟!
微软最有 价值专家(MVP)
微软最有价值专家是微软公司授予第三方技术专业人士的一个全球奖项 。 28年来 , 世界各地的技术社区领导者 , 因其在线上和线下的技术社区中分享专业知识和经验而获得此奖项 。
MVP是经过严格挑选的专家团队 , 他们代表着技术最精湛且最具智慧的人 , 是对社区投入极大的热情并乐于助人的专家 。 MVP致力于通过演讲、论坛问答、创建网站、撰写博客、分享视频、开源项目、组织会议等方式来帮助他人 , 并最大程度地帮助微软技术社区用户使用Microsoft技术 。
更多详情请登录官方网站:
https://mvp.microsoft.com/zh-cn
表达式树 (C#)文档

推荐阅读