码迷,mamicode.com
首页 > 其他好文 > 详细

简单和复杂的lambda表达式

时间:2015-05-04 16:00:27      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

今天遇到一个问题,代码是这样的。
` public List 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。

简单和复杂的lambda表达式

标签:

原文地址:http://my.oschina.net/somereasons/blog/410425

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!