2012-04-30 2 views
1

enter image description hereКак сравнить значения элементов списка Sharepoint?

Уважаемый Все,

Мой список constains деталей даты/времени, и я хочу, чтобы получить наибольшее значение даты. Для моего примера, 1 мая 2012 ближайшего дня на сегодня? как я могу сравнить эти значения и получить последние с C#? Я просмотрел список и элементы в коде;

using (SPWeb web = SPContext.Current.Site.RootWeb) 
{ 
     SPList alertList = web.Lists["Alert Status"]; 
     if (alertList != null) 
     { 
      foreach (SPListItem alertItem in alertList.Items) 
      { 
       DateTime startDate = (DateTime)alertItem["Alert Date"]; 

      } 
     } 
} 
+0

Вы хотите получить последнюю или самую близкую дату с сегодняшнего дня (включая даты в прошлом)? – Stefan

+0

Я хочу получить самую близкую дату с сегодняшнего дня. Спасибо – mkacar

ответ

5

Я рекомендую извлекать и сортировать предметы с помощью CAML query. Вы можете использовать SPQuery Class:

SPList list = web.Lists["Alert Status"]; 

SPQuery query = new SPQuery(); 
query.Query = @"<OrderBy><FieldRef Name='Alert_x0020_Date' Ascending='FALSE' /></OrderBy>"; 
query.RowLimit = 1; 

SPListItemCollection items = list.GetItems(query); 
return items.Count == 0 ? DateTime.MinValue : (DateTime) items[0]["Alert Date"]; 

Если есть много пунктов в списке, SPList.Items очень медленно, так как все элементы извлекаются из базы данных.

Update:

Вы не должны распоряжаться SPContext.Current.Site.RootWeb. На это может ссылаться позже другой код. Используйте правило только распоряжайтесь объектами, которые вы открываете самостоятельно в качестве ориентира. Для получения дополнительной информации см. Disposing Objects.

+0

Это лучшая концепция с точки зрения производительности –

+0

+1 для объяснения правильного способа удаления объекта SPWeb. Ваш ответ был бы еще лучше, если бы вы предложили LINQ to SharePoint для OP. Я не могу вспомнить, как вернуться к написанию строки CAML :-) – Ken

0

Если вы собираете ваши даты, как это:

List<DateTime> dates; 
using (SPWeb web = SPContext.Current.Site.RootWeb) 
{ 
    SPList alertList = web.Lists["Alert Status"]; 
    if (alertList != null) 
    { 
     dates = alertList.Items.Select(alertItem => (DateTime)alertItem["Alert Date"]).ToList(); 
    } 
} 

Это даст вам последнюю абсолютную дату:

dates.OrderByDescending(date => date).First();

Это даст вам дату ближе к правому В настоящее время:

dates.OrderBy(date => Math.Abs((date - DateTime.Now).TotalMilliseconds)).First();

Смежные вопросы