2011-01-17 8 views
1

おはようございますスタックオーバーフロー、私は過去90日間の製品リストを日付順に並べ替え、効率的な方法で商品をグループ化して日付順に表示する必要があります。 Linq-To-SQLは、日付比較関数の多くを理解していないので、ここで何をすべきかについてちょっと分かりません。MVC2日付で商品をグループ化して表示する

「今日」、「昨日」、「過去30日」のようなタイトルのある同じ日付の商品グループが、それぞれのグループに含まれています。誰でも助けることができますか?私は理解し

答えて

1

だから、あなたはスカイプで歴史グループのようなグループが必要になります。

Show messages from: Yesterday * 7 days * 30 days .. etc. 

はこのように、あなたは日付といくつかの他のフィールドを持つクラスの製品を持っていると仮定します。

public class Product 
    { 
     public DateTime Date { get; set; } 

     public string ProductName { get; set; } 
    } 

あなたができるより

public enum ProductGroupEnum 
    { 
     Today = 0, 
     Yesterday = 1, 
     Last30Days = 30 
    } 

    public static class ProductsHelper 
    { 
     public static List<Product> GetProductsGroup(ProductGroupEnum group, IEnumerable<Product> products) 
     { 
      var daysCount = (int)group; 

      return products.Where(x => DateTime.Now.Date - x.Date.Date <= new TimeSpan(daysCount, 0, 0, 0)).ToList(); 
     } 
    } 

列挙型ではなく、Datのように日付を渡すことができますeTime.Now.AddDays(-1)などです。 「最後の3か月のグループ」が必要な場合、90日を使用するのは間違いです。

とコードの最後の例:

var products = new List<Product>() 
           { 
            new Product() {Date = DateTime.Now.AddMinutes(-30), ProductName = "TodayProduct"}, 
            new Product() {Date = DateTime.Now.AddDays(-1), ProductName = "YesteradayProduct"}, 
            new Product() {Date = DateTime.Now.AddDays(-25), ProductName = "LastMonthProduct"} 
           }; 
      var todayProducts = ProductsHelper.GetProductsGroup(ProductGroupEnum.Today, products); 
      var yesterdayProducts = ProductsHelper.GetProductsGroup(ProductGroupEnum.Yesterday, products); 

だから、「todayProducts」は、第1の1つの製品、 のみが含まれますが、「yesterdayProducts」は、第1の2つの製品(昨日から今日までの製品を意味する)containtます。

また、必要に応じてフィルタリングする製品については、上記の 'ProductsHelper'ヘルパーメソッドを 'view'で簡単に使用できます。

このヘルプが必要です。

+0

ありがとうございます、あなたの列挙の提案は、少なくとも私を得るために十分でなければなりません。 – Gallen