【发布时间】:2009-03-10 08:49:03
【问题描述】:
我试图为 LINQ2SQL 查询动态创建 Where 谓词:
...Where(SqlMethods.Like(r.Name, "%A%") ||
SqlMethods.Like(r.Name, "%B%") ||
SqlMethods.Like(r.Name, "%C%") || ...)
A、B、C 等来自某个数组。所以我尝试了以下方法:
var roleExpression = Expression.Parameter(typeof(Role), r);
var nameExpression = Expression.Property(roleExpression, "Name");
var termExpression = Expression.Constant("%" + term[i] + "%");
var likeExpression = Expression.Call(
typeof(SqlMethods), "Like",
new[] { typeof(string), typeof(string) }, nameExpression, termExpression);
但是,最后一行失败并显示消息类型“System.Data.Linq.SqlClient.SqlMethods”上没有方法“Like”与提供的参数兼容。
所以我尝试了以下行:
var likeExpression = Expression.Call(null,
typeof(SqlMethods).GetMethod("Like", new[] { typeof(string), typeof(string) }),
nameExpression, searchTermExpression)
这行得通。但是,我不明白这两行之间有什么区别。在我看来,他们应该提供相同的结果。
谁能解释一下?
亲切的问候,
罗纳德·维尔登伯格
【问题讨论】:
标签: c# linq linq-to-sql lambda