MVC2按日期分组和显示产品

时间:2011-01-17 19:12:22

标签: c# asp.net asp.net-mvc-2

早上好Stack Overflow,我刚刚查看了按日期排序的过去90天的产品列表,需要以有效的方式显示产品,按日期对产品进行分组。 Linq-To-Sql不了解很多日期比较函数,所以我很遗憾在这里做什么。

我想要做的是在div中包含具有相同日期的每组产品,其标题为“今天”,“昨天”或“过去30天”。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

所以,据我所知,你需要像Skype这样的历史小组这样的小组:

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

假设您有类别Product with Date和其他一些字段,如下所示:

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();
        }
    }

而不是枚举你可以传递日期,我想,比如DateTime.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);

所以'今天产品'将只包含第一个产品, 但'昨天产品'将包含前两种产品(意味着从昨天到今天的产品)。

此外,您可以在“视图”中轻松使用上述'ProductsHelper'辅助方法,根据您的需要进行产品过滤。

希望得到这个帮助。