2013-08-26 2 views
0

Я искал много по этому вопросу, что является неправильным здесьDynamic Expression Building Error

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 

ответ

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

Это создает переменной имени "220".
Вы никогда не объявляли эту переменную или не назначали ей значение.

Вместо этого вы хотите Expression.Constant, который принимает значение и возвращает выражение, которое имеет это значение.
(вам, вероятно, нужно разобрать строку в int)

Однако, вам не нужно, чтобы построить это вручную на всех.

Вместо этого, вы должны просто написать return a => a.CompanyId == companyId

+0

да благодаря Сработало – Sankara