你不能使用System.Data.Linq.SqlClient.SqlMethods
,所以你必须自己创建一个Like
方法。
例子:
void Main()
{
var argLeft = Expression.Constant("Foobar", typeof(string));
var argRight = Expression.Constant("F%b%r", typeof(string));
var likeExpression = Expression.Call(typeof(StringHelper), "Like", null, argLeft, argRight);
Expression.Lambda(likeExpression).Compile().DynamicInvoke().Dump();
}
public static class StringHelper
{
public static bool Like(string toSearch, string toFind)
{
return new Regex(@"\A" + new Regex(@"\.|\$|\^|\{|\[|\(|\||\)|\*|\+|\?|\\").Replace(toFind, ch => @"\" + ch)
.Replace('_', '.')
.Replace("%", ".*") + @"\z",
RegexOptions.Singleline).IsMatch(toSearch);
}
}
输出:
真的
(此处的示例实现)
编辑:
由于您使用的是实体框架,因此您应该PatIndex
改用。
var likeExpression = Expression.GreaterThan(Expression.Call(typeof(SqlFunctions), "PatIndex", null, argLeft, argRight),
Expression.Constant(0, typeof(int?)));