Link blog.vitalyzhukov.ru

Блог переехал вот сюда: Blog.VitalyZhukov.ru

17 окт. 2010 г.

SharePoint 2007. Получение максимального/минимального значения поля в списке

Зачем
Для получения минимального/максимального значения какой-нибудь даты или любого другого значения. Область применения ограничена ишь фантазией разработчика.


Что понадобится
Класс 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);

Напоследок

Аналогично можно создать метод для поиска минимального значения

Комментариев нет:

Отправить комментарий