几周前,我决定从使用 Linq 切换到 SQL 来使用 NHibernate。(原因包括:其他基于 Java 的项目使用 Hibernate;目标 DB 尚未确定;可能必须针对多个 DB)
无论如何,我想继续使用 LINQ,并看到 NHibernate 支持 LINQ。我希望有少量的对象访问方法,并且能够传递一个过滤查询的 LINQ 表达式,但它没有按预期工作。
这是一个基于http://www.albahari.com/nutshell/predicatebuilder.aspxPredicateBuilder
的示例
public static Expression<Func<Product, bool>> ContainsInDescription(params string[] keys)
{
var predicate = PredicateBuilder.False<Product>();
foreach (string keyword in keys)
{
string temp = keyword.ToLower();
predicate = predicate.Or(p => p.Description.Contains(temp));
}
return predicate;
}
该Predicate.False
语句导致以下错误消息:
Atf.NUnit.Model.TestLinq.TestProductCID():
System.Exception : Could not determine member type from Constant, False, System.Linq.Expressions.ConstantExpression
该p.Description.Contains
语句导致此错误消息:
Atf.NUnit.Model.TestLinq.TestProductCID():
System.Exception : Could not determine member type from Invoke, Invoke(p => p.Description.Contains(value(Atf.Model.Linq.ProductLinq+<>c__DisplayClass2).temp), f), System.Linq.Expressions.InvocationExpression
使用string.Equals
和其他此类方法时,我会遇到类似的错误。
我在这里做错了吗?我应该使用不同的方法吗?