简单和复杂的lambda表达式
2015-05-04 00:00
127 查看
摘要: 遇到问题:提示如下“A lambda expression with a statement body cannot be converted to an expression tree”
今天遇到一个问题,代码是这样的。
然后会提示错误A lambda expression with a statement body cannot be converted to an expression tree
,就在lambda表达式那句话上。想想这也没什么不对的啊。然后查了一下,找到了这个链接
大意是说,如果是和数据库相关的(IQueryable类型),是要准备翻译成sql语句的,所以不能使用复杂的lambda条件,只能使用简单的。使用复杂的lambda语句,只能针对IEnumerable类型。
解决方案:
1、将 (ele, arr) => { return arr.Contains(ele.ID); 改为 (ele, arr) => arr.Contains(ele.ID); 就可以了。
2、或者,使用AsEnumerable()函数强制转化为IEnumerable。
今天遇到一个问题,代码是这样的。
public List<BillName> QueryBill(int[] id = null, string[] name = null) { List<BillName> queryResult = new List<BillName>(); using (var dbs = new Dal.CashLogContext()) { var result = from a in dbs.BillNames where (QueryCondition(a, id, (ele, arr) => { return arr.Contains(ele.ID); }) select a; } return queryResult; } public bool QueryCondition<T>(BillName ba, T[] conditionArray, Func<BillName, T[], bool> TestEqual) { if (conditionArray != null) return TestEqual(ba, conditionArray); else return true; }
然后会提示错误A lambda expression with a statement body cannot be converted to an expression tree
,就在lambda表达式那句话上。想想这也没什么不对的啊。然后查了一下,找到了这个链接
大意是说,如果是和数据库相关的(IQueryable类型),是要准备翻译成sql语句的,所以不能使用复杂的lambda条件,只能使用简单的。使用复杂的lambda语句,只能针对IEnumerable类型。
解决方案:
1、将 (ele, arr) => { return arr.Contains(ele.ID); 改为 (ele, arr) => arr.Contains(ele.ID); 就可以了。
2、或者,使用AsEnumerable()函数强制转化为IEnumerable。
相关文章推荐
- SQL语句技巧--复杂逻辑的SQL简单实现(1)
- 把学习由复杂变简单(二叉树和树)
- 程序员怎样在复杂代码中找 bug?(简单)
- 异常处理,简单而又复杂的问题
- USACO Section 2.4 The Tamworth Two - 又犯2了..又把一个简单的问题整复杂了..
- 最新Swift学习教程-从简单到复杂 韩俊强的博客
- Libevent使用例子,从简单到复杂
- 【理想流】软件开发究竟是简单的还是复杂的
- 分布式消息队列RocketMQ&Kafka -- 消息的“顺序消费”-- 一个看似简单的复杂问题
- 复杂页面消退的一个简单实例
- javaScript如何简单而准确地判断复杂数据类型
- 简单、直观的实现优于复杂、难懂的实现,最近开发扑克识别过程的总结
- 黑马程序员 Android零基础学习 化复杂为简单 配置好的android开发环境
- js中简单和复杂数据类型存储和传递问题
- 简单扩展shiro 实现NOT、AND、OR权限验证(支持复杂一点的表达式)
- php之用户管理系统的实现!(从简单到复杂)
- 简单与复杂
- 简单理解计算-算法时间复杂度
- 单核单线程、单核多线程、多核多线程以及并行计算对大数据和复杂算法的简单效应