C# 需要帮助为Where子句创建表达式树吗
我需要创建一个表达式树,我可以将它作为C# 需要帮助为Where子句创建表达式树吗,c#,linq-to-entities,expression-trees,C#,Linq To Entities,Expression Trees,我需要创建一个表达式树,我可以将它作为Where子句中的谓词参数传递给Linq to Enities查询 public static IQueryable<TSource> Where<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate); 用谷歌搜索出来 var paramExpr = Expression.P
Where
子句中的谓词
参数传递给Linq to Enities查询
public static IQueryable<TSource> Where<TSource>(this IQueryable<TSource> source,
Expression<Func<TSource, bool>> predicate);
用谷歌搜索出来
var paramExpr = Expression.Parameter(typeof(TSource), "src");
var memberExpr = (MemberExpression)property.Body;
List<Expression> arrayInits = new List<Expression>();
var arrExpr = Expression.Constant(((string)values[0]).Split(new char[] { ';' }));
MethodInfo containsMethod = typeof(ICollection<string>).GetMethod("Contains");
var containsExpression = Expression.Call(null, contains, arrExpr, memberExpr);
var containsLambda = Expression.Lambda<Func<TSource, bool>>(containsExpression, property.Parameters);
var-paramExpr=Expression.Parameter(typeof(TSource),“src”);
var memberExpr=(MemberExpression)property.Body;
List arrayInits=新列表();
var arrExpr=Expression.Constant((字符串)值[0]).Split(新字符[]{';'}));
MethodInfo containsMethod=typeof(ICollection).GetMethod(“Contains”);
var containsExpression=Expression.Call(null、contains、arrExpr、memberExpr);
var containsLambda=Expression.Lambda(containsExpression,property.Parameters);
而且它有效 公共静态表达式CreateContainsPression(T obj,字符串[]数组)
public static Expression<Func<T, bool>> CreateContainsExpression<T>(T obj, string[] array)
{
var paramExpr = Expression.Parameter(typeof(T), "obj");
var arrExpr = Expression.Constant(array);
var colourPropExpr = Expression.Property(paramExpr, "Color");
MethodInfo containsMethod = typeof(ICollection<string>).GetMethod("Contains");
var containsExpr = Expression.Call(arrExpr, containsMethod, colourPropExpr);
return Expression.Lambda<Func<T, bool>>(containsExpr, paramExpr);
}
{
var paramExpr=表达式参数(typeof(T),“obj”);
var arrExpr=表达式常数(数组);
var colorpropexpr=Expression.Property(参数xpr,“颜色”);
MethodInfo containsMethod=typeof(ICollection).GetMethod(“Contains”);
var containsExpr=Expression.Call(arrExpr、containsMethod、colorpropexpr);
返回表达式.Lambda(containsExpr,paramExpr);
}
public static Expression<Func<T, bool>> CreateContainsExpression<T>(T obj, string[] array)
{
var paramExpr = Expression.Parameter(typeof(T), "obj");
var arrExpr = Expression.Constant(array);
var colourPropExpr = Expression.Property(paramExpr, "Color");
MethodInfo containsMethod = typeof(ICollection<string>).GetMethod("Contains");
var containsExpr = Expression.Call(arrExpr, containsMethod, colourPropExpr);
return Expression.Lambda<Func<T, bool>>(containsExpr, paramExpr);
}