2012-04-30 9 views
1

enter image description hereSharepoint List Itemsの値を比較するには?

親愛なるすべて、

私のリストは、日付/時刻の項目を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 to OPを提案していれば、あなたの答えはさらに良かったでしょう。私はCAML文字列を書くことに戻って考えることはできません:-) – Ken

0

あなたはこのようなあなたの日付収集する場合:これはあなたの右に最も近い日付を与える

dates.OrderByDescending(date => date).First();

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.OrderBy(date => Math.Abs((date - DateTime.Now).TotalMilliseconds)).First();