2

数週間前、Linq から SQL に切り替えて、代わりに NHibernate を使用することにしました。(理由は次のとおりです。他の Java ベースのプロジェクトでは Hibernate が使用されています。ターゲット DB はまだ決定されていません。複数の DB をターゲットにする必要がある可能性があります)。

とにかく、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ます。

ここで何か間違ったことをしていますか?別のアプローチを使用する必要がありますか?

4

0 に答える 0