linq - NHibernate - 使用 LINQ 选择随机记录数

标签 linq nhibernate random linq-to-nhibernate

有谁知道如何使用 LINQ 在 NHibernate 中选择随机数的记录。

我希望我可以这样说:

var rand = new Random();
var test = session.Query<Entity>().OrderBy(x => rand.Next()).Take(5).ToList();

但是它不喜欢 OrderBy 表达式中的变量。一种选择是在我进行排序之前调用 ToList,但这会获取整个记录集,这并不理想,因为它可能会返回数千条记录。

我还发现了以下内容(向下滚动到底部答案):

NHibernate Insert into ... select ... with GUID as PrimaryKey

但是我不确定如何使用 LINQ 调用它。如果有人能提供帮助,我将不胜感激。谢谢

最佳答案

此解决方案可能不是很好,因为它会改变您实体的形状,但如果您的用例可以接受...

根据 Ayende 的这篇文章,将 SQL 函数映射到实体的属性似乎非常容易:

http://ayende.com/blog/1720/using-sql-functions-in-nhibernate

你能添加一个像

这样的属性映射吗

<property name='Random' formula='NEWID()'/>

您针对的实体?然后你应该能够写一个像

这样的查询

var test = session.Query<Entity>().OrderBy(x => x.Random).Take(5).ToList();

关于linq - NHibernate - 使用 LINQ 选择随机记录数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17796077/

相关文章:

c# - 将 SharpArch 与 C# Windows 应用程序一起使用的示例?

java - SplittableRandom.split() 线程安全吗?

python - 高效随机抽样

c# - Linq to Xml : Is XDocument a caching reader?

c# - Linq 方法不可用于实现 IEnumerable 的集合

c# - linq在groupby之后排序分组元素

c# - 给定 LINQ 查询,如何填充具有两列的 listView?

sql - NHibernate "SELECT ... FROM (SELECT ..."标准

c# - NHibernate IQueryable 集合作为根的属性

sql - 如何从 MySQL 的一系列行中随机选择 16 条记录?