我正在跟随这个优秀的示例:将Linq转换为Sql表达式树
在我的情况下,我试图构建一个表达式树,其中要过滤的类型仅在运行时已知,并且表示为字符串。 在上面的示例中,类型 Region 已经知道并直接键入:
ParameterExpression pe = Expression.Parameter(typeof(Region), "region");
在我的应用程序中,我已经能够将其重写为:
ParameterExpression pe = Expression.Parameter(Type.GetType("mystring"), "listData");
我的难点在于这个例子中的内容:
MethodCallExpression whereCallExpression = Expression.Call(
typeof(Queryable),
"Where",
new Type[] { query.ElementType },
query.Expression,
Expression.Lambda<Func<Region, bool>>(e3, new ParameterExpression[] { pe }));
var results = query.Provider.CreateQuery<Region>(whereCallExpression);
在这两行中,Region 是直接输入的。有没有一种动态使用字符串"Region"来实现同样的效果的方法呢?
Expression.Equal()
对应于使用==
运算符。您无法添加该参数。您需要生成一个等效于stringVar.Equals(otherStringVar, StringComparison.OrdinalIgnoreCase)
或使用静态的String.Equals(stringVar, otherStringVar, StringComparison.OrdinalIgnoreCase)
的表达式。 - Jeff Mercado