gpt4 book ai didi

c# - LINQ to Nhibernate 用户在 where 子句中定义的函数

转载 作者:行者123 更新时间:2023-11-30 13:48:05 25 4
gpt4 key购买 nike

我正在尝试执行以下操作:

var query =
(from a in session.Query<A>()
where a.BasicSearch(searchString) == true
select a);

但它一直给我这个异常“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

但是,您可以使用 techniques discussed here 以另一种方式重用谓词. (但是我不确定这是否适用于 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);
}

用法:

from a in Session.Query<A>().Where(A.BasicSearch(criteria))

更新:显然 NHibernate 会有问题。参见 this blog post for a version that ought to work .

关于c# - LINQ to Nhibernate 用户在 where 子句中定义的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13679546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com