Rub*_*uba 3 c# linq nhibernate
我正在尝试执行以下操作:
var query =
(from a in session.Query<A>()
where a.BasicSearch(searchString) == true
select a);
Run Code Online (Sandbox Code Playgroud)
但它一直给我这个异常"System.NotSupportedException"!
不知道怎么解决这个问题?
在LINQ查询中不可能使用用户定义的函数.NHibernate linq提供程序不知道如何将函数转换为SQL.
LINQ to NHibernate通过检查您在运行时提供的LINQ表达式,并将它在此表达式树中找到的内容转换为常规SQL表达式来工作.这是一篇很好的文章,可以获得表达树的一些背景知识:http://blogs.msdn.com/b/charlie/archive/2008/01/31/expression-tree-basics.aspx
但是,您可以使用此处讨论的技术以另一种方式重用这样的谓词.(我不确定这是否适用于NHibernate.)如果它工作,它看起来像这样:
// this could be a static method on class A
public static Expression<Func<A, bool>> BasicSearch(string criteria)
{
// this is just an example, of course
// NHibernate Linq will translate this to something like
// 'WHERE a.MyProperty LIKE '%@criteria%'
return a => criteria.Contains(a.MyProperty);
}
Run Code Online (Sandbox Code Playgroud)
用法:
from a in Session.Query<A>().Where(A.BasicSearch(criteria))
Run Code Online (Sandbox Code Playgroud)
更新:显然NHibernate会出现问题.请参阅此博客文章,了解应该运行的版本.