从SQLite C#中选择N条随机记录

时间:2018-11-28 16:06:43

标签: c# linq sqlite

我想从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语句。

1 个答案:

答案 0 :(得分:3)

SQLiteConnection类的Table ()方法返回TableQuery ; -参见http://www.rbdocumentation.com/html/8594fc64-ce81-faa6-1472-25dcdb59a1ce.htm

不支持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);