LINQ2SQL Получить случайную запись - PullRequest
3 голосов
/ 22 ноября 2011

Я нашел этот удобный запрос;

SELECT TOP 1 * FROM Advertising ORDER BY NEWID()

но нужно превратить его в запрос LINQ.

Я пытался сделать что-то вроде;

var a = (from record in Advertising
        select record)

но не могу понять, как сделать упорядочение, чтобы получить случайную запись.

Ответы [ 3 ]

4 голосов
/ 22 ноября 2011

Вероятно, проще всего просто выполнить команду напрямую.

var a = ctx.ExecuteQuery<Advertising>("select top 1 * from Advertising order by NEWID()").First();

Вы также можете сделать это с помощью sproc, или, если вам нужен полностью общий способ сделать это, вы можете запросить счетчик, затем сгенерировать случайное число в этом диапазоне и пропустить. (Как другие заметили, когда я печатал это)

3 голосов
/ 22 ноября 2011

Это не будет генерировать SQL-запрос, который вы просматриваете, но должен возвращать случайный результат без необходимости извлечения всех записей:

Random r = new Random();
var record = r.Next(Advertising.Count());

var randomRecord = Advertising.Skip(record).FirstOrDefault(1);

Редактировать: он также должен быть более эффективным, чем случайная сортировка(если только SQL Server не оптимизирует сортировку)

Редактировать 2: Take (1) должно быть FirstOrDefault () для возврата записи, а не записи из списка 1 длиной.

0 голосов
/ 22 ноября 2011

вот мой случайный метод получения

Public Shared Function GetSingleRandom(Of T)(ByVal target As IEnumerable(Of T)) As T
        Dim r As New Random(DateTime.Now.Millisecond)
        Dim position As Integer = r.Next(target.Count)
        Return target.ElementAt(position)
    End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...