2

几周前,我决定从使用 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和其他此类方法时,我会遇到类似的错误。

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

4

0 回答 0