如何为包含函数调用的NHibernate构建LINQ查询?

时间:2013-05-27 04:54:48

标签: nhibernate linq-to-nhibernate

几个星期前,我决定从使用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和其他此类方法时出现类似错误。

我在这里做错了吗?我应该采用不同的方法吗?

0 个答案:

没有答案