动态表达式构建错误

时间:2013-08-26 14:10:36

标签: linq c#-4.0 lambda

我在这个问题上搜索了很多错误

Shorter version of my code is
/// companyid  is integer type value here is 220
    var cond1 = BuildExpression(companyId);
    var acntlst=entities.Accounts.Where(cond).ToList();

帐户是查询帐户集合的类

BuildExpression功能

 private static Expression<Func<Account, bool>> BuildExpression(string companyid)

 {
    var paramexp = Expression.Parameter(typeof (Account), "p");
     var proprty = typeof(Account).GetProperty("CompanyId");
     var prpexp = Expression.Property(paramexp, proprty);

     var varexp = Expression.Variable(typeof(Int32), companyid);
     var cond1 = Expression.Equal(prpexp, varexp);

     return Expression.Lambda<Func<Account, bool>>(cond1,paramexp);
    }

错误消息

The parameter '220' was not bound in the specified LINQ to Entities query expression

1 个答案:

答案 0 :(得分:3)

Expression.Variable(typeof(Int32), companyid);

这会创建一个名为"220"变量 您从未声明过此变量或为其赋值。

相反,您需要Expression.Constant,它接受​​一个值并返回一个具有该值的表达式 (您可能需要将字符串解析为int

但是,您根本不需要手动构建它。

相反,你应该写return a => a.CompanyId == companyId