我有以下代码:
return Expression.Call(
typeof(System.Linq.Enumerable),
"Like",
new Type[] { typeof(string) },
Expression.Constant(filter.Value),
Expression.Coalesce(member, Expression.Constant(string.Empty))
);
好吧,所以我不想使用“Contains”,而是想创建自己的名为“Like”的扩展方法,然后做一些特定的事情。我开始创建一个像普通的扩展方法:
public static bool Like<TSource>(this IEnumerable<TSource> source, TSource value)
{
return true;
}
我现在正在回归尝试让事情发挥作用。我得到的错误是“Like”不是Enumerable的方法。我可以使用它自己的新扩展方法,但不能在expression.call中使用。
任何想法可能是什么问题?我的意思是,如果我想要精确的文本搜索,“包含”就可以了,但我真的想要方法所暗示的,“喜欢”搜索。
谢谢,
大卫
答案 0 :(得分:0)
第一个代码是调用静态Enumerable.Contains<T>(Ienumerable<T>,T)
- 它不是作为扩展方法触发的,而是作为常规静态方法调用触发的。
例如,如果你有:
public static class StringExtensions
{
public static bool Like<TSource>(this IEnumerable<TSource> source, TSource value)
{
return true;
}
}
你应该写:
Expression.Call(
typeof(StringExtensions), // the class that contains the extension method
"Like",
new Type[] { typeof(string) },
Expression.Constant(array), // this is the IEnumerable<string>
Expression.Constant(String.Empty)
);