使用 Fluent NHibernate 选择 N 个随机行
如何使用 Fluent NHibernate 检索 N 个随机实体?
所需的查询:
SELECT TOP 5 * FROM MyTable ORDER BY newid()
我希望能够使用 Linq 存储库来实现此目的,但我不确定结果是否是最佳的。我对HQL不熟悉。
How do I retrieve N random entities using Fluent NHibernate?
Desired query:
SELECT TOP 5 * FROM MyTable ORDER BY newid()
I'd like to be able to use the Linq repo's for this, but I'm not sure if the result will be optimal. I am not familiar with HQL.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
旁注:FluentNHibernate 不用于查询,它仅用于映射和配置。查询是“纯”NHibernate 的一部分。
您不能直接使用 LINQ 来完成此操作。
newid()
函数是 SQL Server 特定的,因此 NHibernate 中没有直接等效的函数。您在这里可以做的是通过使用ISession
的CreateSQLQuery
方法使用本机 SQL 进行查询。另请参阅此处了解更多“深入 NHibernate”方法:
如何使用 NHibernate 的 ICriteria 选择随机行API?
Side note: FluentNHibernate is not for querying, it is for mapping and configuration only. Querying is part of "pure" NHibernate.
You can't do it using LINQ directly. The function
newid()
is SQL Server-specific, so there's no direct equivalent in NHibernate. What you can do here is to query using native SQL by usingISession
'sCreateSQLQuery
method.See also here for more "deep into NHibernate" method:
How do I select a Random Row using NHibernate's ICriteria API?
您可以使用 Take/Skip linq 扩展:
对于 PostgreSql DB,这可扩展为以下 SQL 语句:
You can use Take/Skip linq extensions:
With PostgreSql DB this expands to the following SQL statement:
SQL Server 特定的解决方案
其中
Word
是随机实体:SQL Server-specific Solution
Where
Word
is the random entity: