2011-12-15 2 views
1

Использование ASP.Net MVC3 с C#Выберите случайную единую запись в контроллере

Как я могу выбрать одну случайную запись из моей базы данных?

Это код, у меня сейчас

CJAd cjad = db.CJAds.Single(c => c.category_id == 1 && c.ad_active == true); 
+0

А вам нравится код, который вы имеете сейчас, потому что? .. –

+1

Вам не нужно делать '&& c.ad_active == true', просто' && c.ad_active' достаточно. –

ответ

3
var selection = db.CJAds.Where(c => c.category_id == 1 && c.ad_active); 
CJAd cjad = selection 
    .OrderBy(c => c.id) 
    .Skip(new Random().Next(selection.Count())) 
    .First(); 
+0

Это выглядит хорошо и не вызывает ошибок в Visual Studio, но вызывает эту ошибку. System.NotSupportedException: метод «Skip» поддерживается только для отсортированного ввода в LINQ to Entities. Метод «OrderBy» должен быть вызван перед методом «Пропустить». –

+0

Вы не указали, какую структуру вы используете. Но в этом случае добавьте некоторую сортировку (OrderBy()) перед пропуском. Я могу помочь вам здесь, так как я не знаю вашего стола. – Tim

0

Im на мобильном устройстве, так не может проверить. Это должно сработать.

CJAd cjad = db.CJADs.Where(c => c.category_id == 1 && c.ad_active).OrderBy(c => Guid.NewGuid()).FirstOrDefault(); 
+0

Я думаю, что это невозможно оценить в базе данных и приведет к полной загрузке таблицы и упорядочению памяти. – Tim