几个星期前,我决定从使用Linq切换到使用NHibernate的SQL。 (原因包括:其他基于Java的项目使用Hibernate;目标数据库尚未确定;可能必须定位多个数据库)
无论如何,我想继续使用LINQ并看到NHibernate支持LINQ。我希望有一小部分对象访问方法,并能够传递一个LINQ表达式来过滤查询,但它没有按预期工作。
以下是基于http://www.albahari.com/nutshell/predicatebuilder.aspx
中的PredicateBuilder
的示例
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
和其他此类方法时出现类似错误。
我在这里做错了吗?我应该采用不同的方法吗?