C# 参数'';未在指定的LINQ to Entities查询表达式中绑定
我看到有很多题目类似的问题,但没有一个能解决我的问题。 我正在使用一个长而复杂的代码生成这个lambda表达式,我不想在这里粘贴它(如果需要,我可以粘贴): 我用这样的表达:C# 参数'';未在指定的LINQ to Entities查询表达式中绑定,c#,entity-framework,linq,lambda,C#,Entity Framework,Linq,Lambda,我看到有很多题目类似的问题,但没有一个能解决我的问题。 我正在使用一个长而复杂的代码生成这个lambda表达式,我不想在这里粘贴它(如果需要,我可以粘贴): 我用这样的表达: var cust= db.CUST.Where(lambdaExpression); var custList= cust.ToList(); 当涉及ToList()时,会出现以下错误: 未在指定的LINQ到实体查询中绑定参数“” 表情 我的lambda表达式有什么问题?
var cust= db.CUST.Where(lambdaExpression);
var custList= cust.ToList();
当涉及ToList()时,会出现以下错误:
未在指定的LINQ到实体查询中绑定参数“”
表情
我的lambda表达式有什么问题?当我尝试其他东西时,它是有效的,但这一个不起作用。谢谢
编辑:
这是我的密码:
var property = typeof(CUSTOMER).GetProperty(newArray[0], BindingFlags.Instance | BindingFlags.Public);
var parameter = Expression.Parameter(typeof(CUSTOMER));
var memberExpression = Expression.Property(parameter, property);
var value = Convert.ChangeType(newArray[1], property.PropertyType, CultureInfo.InvariantCulture);
var eq = Expression.Equal(memberExpression, Expression.Constant(value));
if (/*some condition*/)
{
foreach (var elem in someotherlist)
{
var newelem= elem.Replace(" ", string.Empty);
string[] newArray = newelem.Split(':');
var listproperty = typeof(CUSTOMER).GetProperty(newArray[0], BindingFlags.Instance | BindingFlags.Public);
var listparameter = Expression.Parameter(typeof(CUSTOMER));
var listmemberExpression = Expression.Property(listparameter, listproperty);
var listvalue = Convert.ChangeType(newArray[1], property.PropertyType, CultureInfo.InvariantCulture);
var eqnew = Expression.Equal(listmemberExpression, Expression.Constant(listvalue));
eq = Expression.And(eq, eqnew); // I guess problem is here.
}
}
你需要给我们你正在使用的实际代码。这并没有给我们任何关于哪个参数没有绑定的线索。@krillgar它可能是
STATE
,因为它在没有STATE
的情况下工作。我们怎么知道呢?在伪代码中,您只有一个参数(Param0),但在表达式本身中引用了另外两个参数(Param_1和Param_2)。只需发布一些真实的代码即可。删除var listparmeter=Expression.Parameter(typeof(CUSTOMER))编码>并改用参数
变量。
var property = typeof(CUSTOMER).GetProperty(newArray[0], BindingFlags.Instance | BindingFlags.Public);
var parameter = Expression.Parameter(typeof(CUSTOMER));
var memberExpression = Expression.Property(parameter, property);
var value = Convert.ChangeType(newArray[1], property.PropertyType, CultureInfo.InvariantCulture);
var eq = Expression.Equal(memberExpression, Expression.Constant(value));
if (/*some condition*/)
{
foreach (var elem in someotherlist)
{
var newelem= elem.Replace(" ", string.Empty);
string[] newArray = newelem.Split(':');
var listproperty = typeof(CUSTOMER).GetProperty(newArray[0], BindingFlags.Instance | BindingFlags.Public);
var listparameter = Expression.Parameter(typeof(CUSTOMER));
var listmemberExpression = Expression.Property(listparameter, listproperty);
var listvalue = Convert.ChangeType(newArray[1], property.PropertyType, CultureInfo.InvariantCulture);
var eqnew = Expression.Equal(listmemberExpression, Expression.Constant(listvalue));
eq = Expression.And(eq, eqnew); // I guess problem is here.
}
}