Подтвердить что ты не робот

Ограничение количества результатов, возвращаемых в списке из Linq

Я использую Linq/EF4.1 для получения некоторых результатов из базы данных и хотел бы ограничить результаты самыми последними результатами (X). Где X - это номер, заданный пользователем.

Есть ли способ сделать это?

В настоящее время я передаю их как List, если это поможет ограничить набор результатов. Хотя я могу ограничить это, перейдя в цикл до тех пор, пока не нажму X, я просто не буду передавать дополнительные данные.

На всякий случай это актуально... Проект С# MVC3, запущенный из базы данных SQL Server.

4b9b3361

Ответ 1

Используйте функцию Take

int numberOfrecords=10; // read from user
listOfItems.OrderByDescending(x => x.CreatedDate).Take(numberOfrecords)

Предполагая, что listOfItems - это список ваших объектов сущностей, а CreatedDate - это поле, которое имеет значение, созданное датой (используется здесь для выполнения заказа по убыванию для получения последних элементов).

Функция Take() возвращает указанное количество смежных элементов с начала Последовательность.

http://msdn.microsoft.com/en-us/library/bb503062.aspx

Ответ 2

results = results.OrderByDescending(x=>x.Date).Take(10);

OrderByDescending будет сортировать элементы по вашему свойству даты/времени (или логике w/e, которую вы хотите использовать для получения последних), и Take ограничит первые элементы x (сначала самое последнее, благодаря заказу).

Изменить: Чтобы вернуть несколько строк, не начиная с первой строки, используйте Skip():

results = results.OrderByDescending(x=>x.Date).Skip(50).Take(10);

Ответ 3

Используйте Take() перед преобразованием в список. Таким образом, EF может оптимизировать создаваемый запрос и возвращать только нужные вам данные.