2011-01-17 4 views
1

안녕하세요 스택 오버플로, 지난 90 일 동안의 제품 목록을 날짜순으로 정렬하여 날짜순으로 제품을 그룹화하는 효율적인 방식으로 표시해야했습니다. Linq-To-SQL은 많은 날짜 비교 함수를 이해하지 못하므로 여기서 무엇을 해야할지에 관해서는 다소 분실했습니다.MVC2 날짜별로 제품 그룹화 및 표시

"오늘", "어제"또는 "지난 30 일"과 같은 제목으로 div 안에 동일한 날짜의 각 제품 그룹이 포함됩니다. 아무도 도와 줄 수 있니? 내가 이해

답변

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은'오직 첫 번째 제품을 포함, 하지만 'yesterdayProducts은'처음 두 제품이 (가) 포함됩니다은 (어제 오늘 제품을 의미합니다).

또한 위의 'ProductsHelper'도우미 메서드를 '보기'에서 쉽게 사용할 수있어 필요에 따라 필터링 할 수 있습니다.

희망 도움말.

+0

감사합니다. 열거 제안은 최소한 나를 보내주기에 충분해야합니다. – Gallen

관련 문제