6

次の Items クラスがあります。

public class Item
{
   public Item()
   {
   }

   public string Id {get; set;}
   public string Name {get; set;}
   public string Price {get; set;}
   public DateTime CreatedDate {get; set;}

}

私のコードでは、 type の項目List<Item> itemsを含む、私の質問は、次のシナリオで CreatedDate に基づいてリスト内の項目をソート/フィルタリングする最良の方法/プラクティスとして推奨するものです:A LOTItem

  • CreatedDate が日付 x より前であるすべてのアイテム
  • CreatedDate が日付 x より後のすべてのアイテム
  • CreatedDate が日付 x と日付 y の間にあるすべてのアイテム

PS 時間についても言及するとどうなりますか? 日付 x 時間 y の前/後/間のように?

4

7 に答える 7

9

使用できますLINQ

var beforeDateX = items
    .Where(i => i.CreatedDate.Date < DateX); // remove the .Date if you want to include the time
var afterDateX = items
    .Where(i => i.CreatedDate.Date > DateX);
var betweenDates = items
    .Where(i => i.CreatedDate.Date >= DateX && i.CreatedDate.Date <= DateY);

foreachまたは のようなメソッドを使用してToList、クエリを実行し、結果を具体化できます。

foreach(Item i in beforeDateX)
    Console.WriteLine("Name:{0} CreatedDate:{1}", i.Name, i.CreatedAt);
于 2013-08-22T08:57:04.790 に答える
2

Linq を使用します。

var itemsBefore = items.Where(i => i.CreatedDate <= timeBefore);
var itemsAfter = items.Where(i => i.CreatedDate >= timeAfter);
var itemsBetween = items.Where(i => i.CreatedDate >= timeStart && i.CreatedDate <= timeEnd);

ご注文について

var ordrered = items.OrderBy(i => i.CreatedDate);
于 2013-08-22T08:58:14.547 に答える
0

私見 3 番目の方法は問題ありません。

ただし、フィルターが必要ない場合は、リストを取得するときにページネーションを実装できます。大きな日付範囲を設定すると、パフォーマンスの問題が解決されないためです。

于 2013-08-22T08:57:44.127 に答える
0

Enumerable METHODSを確認する必要があります

フィルタリングには、Whereを使用します

list.Where(x=>x.CreatedDate < yourDate).ToList();

ご注文にあたって

list.OrderBy(x=>x.CreatedDate).ToList();
于 2013-08-22T08:57:18.200 に答える