我需要创建一个自定义的“Contains”LINQ表达式,该表达式派生自System.Linq.Expressions.Expression,它在内部执行IEnumerable.Contains方法调用。该类将接受两个表达式参数。第一个计算IEnumerable类型的类型和实例,第二个计算类型为T的实例。
我需要将它作为自己的类,因为我想覆盖ToString方法以返回表示正在执行的操作的自定义字符串。
到目前为止,我有以下内容:
public class ContainsExpression : Expression
{
public ContainsExpression(Expression left, Expression right) :
base(ExpressionType.Call, typeof(ContainsExpression))
{
Left = left;
Right = right;
// Error here: value cannot be null
Expression.Call(
typeof(IEnumerable).GetMethod("Contains", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public), left, right);
}
public static ContainsExpression Contains(Expression itemExpr, Expression collectionExpr)
{
return new ContainsExpression(itemExpr, collectionExpr);
}
public override string ToString()
{
return Left.ToString() + " Contains " + Right.ToString();
}
public Expression Left { get; private set; }
public Expression Right { get; private set; }
}
我在使用Expression.Call时遇到了麻烦。基本上,我想调用IEnumerable.Contains()。
任何指针总是受到赞赏。 TIA。
答案 0 :(得分:2)
嗯,有一个问题是IEnumerable
接口没有Contains
方法。您可能正在寻找System.Linq.Enumerable
中声明的扩展方法。
尝试(假设您有using System.Linq;
指令):
Expression.Call(typeof(Enumerable).GetMethod("Contains", ...