给出一个简单的父类/子类结构。我想使用linqkit在父对象上应用子lambda表达式。我还希望Lambda表达式由实用程序方法提供。
public class Foo
{
public Bar Bar { get; set; }
}
public class Bar
{
public string Value { get; set; }
public static Expression<Func<Bar, bool>> GetLambdaX()
{
return c => c.Value == "A";
}
}
...
Expression<Func<Foo, bool>> lx = c => Bar.GetLambdaX().Invoke(c.Bar);
Console.WriteLine(lx.Expand());上面的代码抛出
System.InvalidCastException: Unable to cast object of type
'System.Linq.Expressions.MethodCallExpression' to type
'System.Linq.Expressions.LambdaExpression'.
at LinqKit.ExpressionExpander.VisitMethodCall(MethodCallExpression m)
at LinqKit.ExpressionVisitor.Visit(Expression exp)
at LinqKit.ExpressionVisitor.VisitLambda(LambdaExpression lambda)
at LinqKit.ExpressionVisitor.Visit(Expression exp)
at LinqKit.Extensions.Expand<TDelegate>(Expression`1 expr)发布于 2010-04-22 05:25:30
var lambdaX = Bar.GetLambdaX();
Expression<Func<Foo, bool>> lx = c => lambdaX.Invoke(c.Bar);这是可行的。
写作时要小心
Expression<Func<Foo, bool>> lx = ...在赋值之前,编译器会处理这一行,在本例中会创建一个方法调用表达式(例如,用于调用Bar.GetLambdaX()),该表达式被赋值给lx。
如果您使用var ...然后调用并赋值Bar.GetLambdaX();,它的值(即lambda表达式)将在以后的lx = ...
发布于 2021-03-01 22:12:35
https://stackoverflow.com/questions/2564975
复制相似问题