如何比较Sharepoint列表项值?

时间:2012-04-30 08:43:55

标签: c# sharepoint sharepoint-2010 sharepoint-2007

enter image description here

亲爱的,

我的列表包含日期/时间项目,我想获得最大的日期值。以我为例,2012年5月1日是今天的最近一天?如何比较这些值并使用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"];

          }
      }
} 

2 个答案:

答案 0 :(得分: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非常慢,因为所有项目都是从数据库中提取的。

<强>更新

你不应该处置SPContext.Current.Site.RootWeb。稍后可能会被其他代码引用。使用规则仅处理您自己打开的对象作为指导。 有关详细信息,请参阅Disposing Objects

答案 1 :(得分: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();