亲爱的,
我的列表包含日期/时间项目,我想获得最大的日期值。以我为例,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"];
}
}
}
答案 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();