1

在此处输入图像描述

各位,

我的列表包含日期/时间项目,我想获得最大的日期值。例如,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"];

          }
      }
} 
4

2 回答 2

5

我建议使用CAML 查询检索和排序项目。您可以使用SPQuery 类

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. 稍后可能会被其他代码引用。使用规则仅处理您自己打开的对象作为指导。有关详细信息,请参阅处置对象

于 2012-04-30T09:12:13.460 回答
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();

于 2012-04-30T08:59:21.107 回答