数週間前、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
ます。
ここで何か間違ったことをしていますか?別のアプローチを使用する必要がありますか?