MVC2 Группировка и отображение товаров по дате - PullRequest
1 голос
/ 17 января 2011

Доброе утро, переполнение стека, я только что просмотрел список продуктов за последние 90 дней, отсортированный по дате, и мне нужно отобразить его так, чтобы сгруппировать продукты по дате. Linq-To-Sql не разбирается во многих функциях сравнения дат, поэтому я немного растерялся относительно того, что здесь делать.

То, что я хотел бы сделать, - это содержать каждую группу продуктов с одинаковой датой внутри div с заголовком, таким как «Сегодня», «Вчера» или «Последние 30 дней». Кто-нибудь может помочь?

1 Ответ

1 голос
/ 18 января 2011

Итак, насколько я понимаю, вам нужны такие группы, как группы истории в скайпе:

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

Предположим, у вас есть класс Product с датой и некоторые другие поля, например:

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

Вместо enum вы можете указать дату, я думаю, например, 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);

Таким образом, «TodayProducts» будет содержать только первые продукты, но «вчерашние продукты» будут содержать первые два продукта (означает продукты со вчерашнего дня до сегодняшнего дня).

Также вы можете легко использовать вышеуказанный вспомогательный метод «ProductsHelper» в «view» для фильтрации товаров в соответствии с вашими потребностями.

Надеюсь, эта помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...