我有一个ArrayList,我需要能够单击一个按钮然后从该列表中随机挑出一个字符串并将其显示在消息框中。
我正在使用Entity Framework 6.x,我有一个表格问题。
我想从这个表中随机获取10个元素,这是我尝试过的代码:
List<Question> GetQuestionsRandomly()
{
Random rnd = new Random();
return context.Questions.OrderBy(x => rnd.Next()).Take(10).ToList();
}
但我收到此错误消息:
An unhandled exception of type 'System.NotSupportedException' occurred in EntityFramework.SqlServer.dll
Additional information: LINQ to Entities does not recognize the method 'Int32 Next()' method, and this method cannot be translated into a store expression.
我该如何解决这个问题?
答案 0 :(得分:5)
而不是Random.Next
使用Guid
随机排序记录。像:
return context.Questions.OrderBy(x => Guid.NewGuid()).Take(10).ToList();
您收到错误,因为LINQ表达式将被转换为基础数据源语言(可能是您的SQL),并且由于Random.Next
未实现转换为SQL ,你得到了例外。
答案 1 :(得分:2)
您可以使用Guid
:
using (var db = new DataStore())
{
var entities = db.Questions
.OrderBy(t => Guid.NewGuid())
.Take(numOfEntries);
return result.ToList();
}
答案 2 :(得分:0)
您不能在查询中使用rnd.Next())因为它不能翻译成SQL。请改用guid:
Random rnd = new Random();
return context.Questions.OrderBy(x => Guid.NewGuid()).Take(10).ToList();