您的位置:首页 > 其它

简单和复杂的lambda表达式

2015-05-04 00:00 127 查看
摘要: 遇到问题:提示如下“A lambda expression with a statement body cannot be converted to an expression tree”

今天遇到一个问题,代码是这样的。

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: