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 に答える