Ограничение количества результатов, возвращаемых в списке из Linq
Я использую Linq/EF4.1 для получения некоторых результатов из базы данных и хотел бы ограничить результаты самыми последними результатами (X). Где X - это номер, заданный пользователем.
Есть ли способ сделать это?
В настоящее время я передаю их как List
, если это поможет ограничить набор результатов. Хотя я могу ограничить это, перейдя в цикл до тех пор, пока не нажму X, я просто не буду передавать дополнительные данные.
На всякий случай это актуально...
Проект С# MVC3, запущенный из базы данных SQL Server.
Ответы
Ответ 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 может оптимизировать создаваемый запрос и возвращать только нужные вам данные.