在列表上执行查询时出现 {“不支持指定的方法。”} 异常,哪些元素应在另一个列表中查找

发布于 2024-11-17 02:53:51 字数 658 浏览 1 评论 0原文

我知道这在某种程度上听起来很愚蠢和模糊,但我需要它:D
我想在 NH3.1 上执行查询:

var internalReferences = Repository<InternalReferenceRule>
                    .FindAll(e => e.PropertyType.EntityType.Id == 1)

var properties = Repository<IProperty>
                        .Find(p => p.PropertyType.RuleObjects.Any(r => internalReferences.ToList().Any(i => i.Id == r.Id)));

第一个列表 (internalReferences) 将在要检查的第二个查询中使用 如果属性的 RuleObjects 在第一个列表中可用。

我对原始查询进行了简化,使其更易于理解......

无论如何,我从 NHibernate 收到 System.NotSupportedException ,其消息是: {“不支持指定的方法。”}

有什么想法吗?

I know it sounds stupid to some extend and vague but I need it :D
I want to perform a query on NH3.1 :

var internalReferences = Repository<InternalReferenceRule>
                    .FindAll(e => e.PropertyType.EntityType.Id == 1)

var properties = Repository<IProperty>
                        .Find(p => p.PropertyType.RuleObjects.Any(r => internalReferences.ToList().Any(i => i.Id == r.Id)));

the first list (internalReferences) is going to be used in the second query which wants to check
if the RuleObjects of a property are available in the first list.

I kinda simplified the original query to make it more understandable.....

anyway, I get the System.NotSupportedException from NHibernate and its message is :
{"Specified method is not supported."}

any idea?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ゝ杯具 2024-11-24 02:53:51

您不能在 NHibernate 查询中使用 internalReferences.Any(),因为它不知道如何将其转换为 SQL。尝试以下操作

var internalReferences = Repository<InternalReferenceRule>
   .FindAll(e => e.PropertyType.EntityType.Id == 1).Select(x => x.Id).ToList();

var properties = Repository<IProperty>
   .Find(p => p.PropertyType.RuleObjects.Any(r => internalReferences.Contains(r.Id)));

这应该会生成使用 IN (:p0, :p1, :p2) 的 SQL 查询。

You can't use internalReferences.Any() in NHibernate queries because it can't know how to translate that to SQL. Try the following

var internalReferences = Repository<InternalReferenceRule>
   .FindAll(e => e.PropertyType.EntityType.Id == 1).Select(x => x.Id).ToList();

var properties = Repository<IProperty>
   .Find(p => p.PropertyType.RuleObjects.Any(r => internalReferences.Contains(r.Id)));

That should result in a SQL query that uses IN (:p0, :p1, :p2).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文