Выберите N случайных записей из SQLite C # - PullRequest
0 голосов
/ 28 ноября 2018

Я хочу выбрать 20 случайных записей из таблицы SQLite из 100 записей.

Вот мой код, и я получаю следующую ошибку.$ 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 голосов
/ 28 ноября 2018

Метод Table () класса SQLiteConnection возвращает 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...