Для получения минимального/максимального значения какой-нибудь даты или любого другого значения. Область применения ограничена ишь фантазией разработчика.
Что понадобится
Класс Helper наподобие описанного здесь.
Реализация
Для конкретизации возьмем получение максимума и создадим метод GetMaxValue. Метод будет принимать следующие параметры:
- list - список, в котором и будем искать максимум;
- fieldInternalName - InternalName поля;
- wherePredicat - предикат WHERE для возможности фильтрации перед поиском максимума.
/// <summary>
/// Получение максимального значения поля в списке
/// </summary>
/// <param name="list">Список</param>
/// <param name="fieldInternalName">InternalName поля</param>
/// <param name="wherePredicat">Предикат WHERE</param>
/// <returns>Максимально значение</returns>
public static object GetMaxValue(SPList list, string fieldInternalName, string wherePredicat)
{
var query = new SPQuery
{
// Берем только поле, которое нас интересует
ViewFields = string.Format("<FieldRef Name='{0}' />", fieldInternalName),
// Строим запрос из предиката и сортировки от большего к меньшему
Query = string.Format(@"{0}<OrderBy><FieldRef Name='{1}' Ascending='False' /></OrderBy>", wherePredicat, fieldInternalName),
// Берем только первую строку
RowLimit = 1
};
// Выполняем запрос
var items = list.GetItems(query).Cast<SPListItem>();
// Если коллекция пуста (например, в списке нет элементов), то возвращаем null
if (items.Count() == 0) return null;
// Возвращаем значение поля
return items.First()[fieldInternalName];
}
Метод можно упростить, убрав параметр wherePredicat. Следующем шагом в упрощении будет создание метода=обертки расширителя для объекта типа SPList. Но о расширителях будет отдельная серия постов.
Применение
Проще некуда:
DateTime? maxDate = null;
maxDate = SPListHelper.GetMaxValue(_listId, "CreateDate", string.Empty);
Напоследок
Аналогично можно создать метод для поиска минимального значения
…
Комментариев нет:
Отправить комментарий