2011-09-23 3 views
1

나는 모든 것을 검색하고이 질문에 대한 anwser를 찾지 못했습니다.동적 linq - 간격으로 그룹화 (DateTime, 숫자)

ID|Date|Price 

1|2010-11-01|100 
2|2010-11-01|120 
3|2010-11-02|50 
4|2010-12-01|30 
5|2010-12-01|220 
6|2011-01-01|400 

어떻게 얻는 방법 : 나는 우리가 같은 데이터가 있다고 가정

이 있습니다 (데이터가 내가 동적 LINQ를 사용해야합니다 동적으로 상자에 포장됩니다) 동적 LINQ의 간격 (날짜 시간, 숫자)로 그룹화 할 이

처럼 그룹화이 데이터 - (날에 의해 그룹) 다음과 같은 그룹

->2010-11-01 = 2 elements 
->2010-11-02 = 1 elements 
->2010-12-01 = 2 elements 
->2011-01-01 = 1 elements 

- (그룹 달로) 다음과 같은 그룹

(연도 별 그룹) 다음과 같은 그룹

->2010 = 5 elements 
->2011 = 1 element 

을 - -

->2010-11 = 3 elements 
->2010-12 = 2 elements 
->2011-01 = 1 elements 

- (분기 그룹) 다음과 같은 그룹

->2010 q.03 = 5 elements 
->2011 q.01 = 1 elements 

(그룹 0에서 가격 (각 50)) 다음 그룹

-> <0-50) = 1 elements 
-> <50-100) = 1 elements 
-> <100-150) = 2 elements 
-> <200-250) = 1 elements 
-> <400-450) = 1 elements 

- (이상적으로는 050, 50-150, From 150-500)) 다음 그룹

-> <0-50) = 1 elements 
-> <50-150) = 3 elements 
-> <150-500) = 2 elements 

어떤 아이디어? 나는 다시 스트레스를 받는다. 그것은 동적 인 LINQ이거나 결국은 정교한 람다 표현이어야한다. 문자열에 포함될 열 이름으로 "그룹화"할 수 있어야합니다. 예 :

예를 들어

:

GroupBy("Date"), GroupBy("Price"); 

답변

0

은 그 방법은

그룹 달

public Item[] data = 
    { 
     new Item { Date = new DateTime(2011, 11, 6), Price = 103, Name = "a" }, 
     new Item { Date = new DateTime(2011, 11, 16), Price = 110, Name = "b" }, 
     new Item { Date = new DateTime(2011, 12, 4), Price = 200, Name = "c" }, 
     new Item { Date = new DateTime(2011, 12, 4), Price = 230, Name = "d" }, 
     new Item { Date = new DateTime(2012, 1, 15), Price = 117, Name = "e" } 
    }; 

var groups = data.AsQueryable().GroupBy("Date.Month", "it").Cast<IGrouping<int, Item>>(); 
당신은 "Date.Day"와 "Date.Year"를 사용할 수 있습니다

그리고 가격 범위와 같은 것을 위해 범위 내의 모든 것을 같은 값으로 매핑하는 함수를 사용할 수 있습니다. 정수 나누기 사용 "(it.Price/50)"