我想从100条记录的SQLite表中选择20条随机记录。
这是我的代码,出现以下错误。 $ exception {“ Order By不支持:x => NewGuid()”} System.NotSupportedException
int tempRun = 10;
var dbPath = Path.Combine("OPS.db");
using (var db = new SQLite.SQLiteConnection(dbPath))
{
var rec = db.Table<CoversData>().Where(p => p.homeR >= tempRun).Take(15);
var randomrec = db.Table<CoversData>().OrderBy(x => Guid.NewGuid()).Take(15);
// error {"Order By does not support: x => NewGuid()"} System.NotSupportedException
foreach (CoversData cd in rec)
{
ResultsListBox.Items.Add(cd.Id.ToString() + " " + cd.GameDate + " " + cd.HometeamName + " " + cd.homeR.ToString());
}
}
答案应该使用Linq格式而不是SQL Select语句。
答案 0 :(得分:3)
SQLiteConnection类的Table
不支持NewGuid的异常是由于OrderBy被视为SQLite查询命令-创建新的Guid实例是在.Net应用程序级别完成的,它不是SQLite函数。
由于表中只有100条记录,因此您可以尝试读取所有表数据,然后在应用程序级别对结果进行排序。像这样:
var randomrec = db.Table<CoversData>().ToList().OrderBy(x => Guid.NewGuid()).Take(15);
或
var randomrec = db.Table<CoversData>().Where(x => true).OrderBy(x => Guid.NewGuid()).Take(15);