无法将具有语句体的lambda表达式转换为表达式树

     很早就碰到了这个问题,当时也没有深入的研究,趁着空闲,遂把这个问题研究清楚。

  (一)普通案例

    下面从一个普通的案例入手,下面准备两个List集合,都是放在内存里面的(需要模拟到远端执行的时候,我们是通过AsQueryable()来进行的)

           var users = new List<Usernew User() {Id = 1, Name = "zz", CompanyId = 1},
                new User(){Id = 2, Name = "fyh",CompanyId = 1},
                new User(){Id = 3,Name = "testuser",CompanyId = 2},
                new User(){ Id = 4,Name = "entuser",CompanyId = 2}
            };
            var companys = new List<Company>(){
                new Company() {Id = 1,Name ="测试公司" },
                new Company() {Id =2,Name ="上市公司" }
            };

     操作一:数据在内存,可以随意操作

      下面主要看带有语句体的lambda表达式

    var userCompanys=users.Join(companys, u => u.CompanyId, c => c.Id, (u, d) =>{
                var des = u.Name + d.Name;
                Console.WriteLine(des);
                return new {UserName=u.Name, CompanyName=d.Name,Des=des};
            });

     数据在内存里面,我们这样写也不会报错,原因是:这里的lambda表达式在内存中,是执行的方法。

     操作二:数据在远端,不能随意操作

     这里我们用AsQueryable模拟数据在远端,下面这段会报错:无法将具有语句体的lambda表达式转换为表达式树;

 var userCompanys2 = users.AsQueryable().Join(companys.AsQueryable(), u => u.CompanyId, c => c.Id, (u, d){
                var des = u.Name + d.Name;
                Console.WriteLine(des);
                return new { UserName = u.Name, CompanyName = d.Name, Des = des };
            });

 很简单的原因是:我们无法将lambda语句体转换为表达式树,然后再转换成sql语句。      

 

转载于:https://www.cnblogs.com/gdouzz/p/8404801.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值