2012-04-30 57 views
1

enter image description here如何比较Sharepoint列表项目值?

亲爱的,

我的目录constains日期/时间项目,我想日期的最大价值。就我的例子而言,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

您想获取最新的或距离今日最近的日期(包括过去的日期)吗? – 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是很慢的,因为所有的项目都是从数据库中提取。

更新:

你不应该处理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();