2012-04-30 58 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();