2013-08-09 2 views
1

수십 개의 게시물을 보았습니다.하지만 그 작업을 수행 할 수는 없습니다.linq 데이터를 연도별로 합산합니다.

asp.net MVC 프레임 워크를 사용하여 "ContributionDate"열과 "Amount"열이 포함 된 Contributions 테이블이 있습니다. 차트에 표시 할 날짜와 금액을로드하고 있습니다.

var results = db.Contributions.Where(c => c.Amount > 0); 

ArrayList xValue = new ArrayList(); 
ArrayList yValue = new ArrayList(); 

results.ToList().ForEach(c => xValue.Add(c.ContributionDate)); 
results.ToList().ForEach(c => yValue.Add(c.Amount)); 

위의 작업이 작동합니다. 이제는 각 연도의 금액을 합계 (즉, 합계)하고 싶습니다. 나는 다음과 유사한 사례를 본 적이 있지만 나는 (이 예에서는, 컴파일러는 새로운 {} 문에서 "c.ContributionDate"을 좋아하지 않는다) 명확하게 우둔 해요 :

var results = db.Contributions 
.Where(c => c.Amount > 0) 
.GroupBy(c => c.ContributionDate) 
.Select(c => new {Amount = c.Sum(b => b.Amount), Date=c.ContributionDate}); 

당신의 도움을 주셔서 감사합니다!

+2

을 더 이상 쓸모없는'ArrayList' 대신 generic'List '클래스를 사용하십시오. – Amy

답변

3

GroupBy을 수행하면 요소를 그룹화하는 데 사용되는 키가 Key 속성으로 표시됩니다. 뿐만 아니라 올해 전체 ContributionDate 값으로

var results = db.Contributions 
    .Where(c => c.Amount > 0) 
    .GroupBy(c => c.ContributionDate) 
    .Select(c => new { Amount = c.Sum(b => b.Amount), Date = c.Key }); 

그러나이 의지 그룹 항목 :

이보십시오. 그렇게하려면, 당신은 이런 식으로 뭔가해야 할 것 :

var results = db.Contributions 
    .Where(c => c.Amount > 0) 
    .GroupBy(c => c.ContributionDate.Year) 
    .Select(c => new 
    { 
     Amount = c.Sum(b => b.Amount), 
     Date = new DateTime(c.Key, 1, 1) 
    }); 

을하지만이 엔티티 프레임 워크 것으로 보인다 있기 때문에, 당신은 아마 CreateDateTime 기능을 사용할 필요가 : 당신은 사용을 고려해야합니다

using System.Data.Entity; 

... 

var results = db.Contributions 
    .Where(c => c.Amount > 0) 
    .GroupBy(c => c.ContributionDate.Year) 
    .Select(c => new 
    { 
     Amount = c.Sum(b => b.Amount), 
     Date = EntityFunctions.CreateDateTime(c.Key, 1, 1, 0, 0, 0) 
    }); 
+0

와우! 환상적. 감사. 나는 이것에 너무 많은 초보자 시간을 보냈다. FWIW, 두 번째 예제는 "매개 변수없는 생성자 만 LINQ to Entities에서 지원됩니다."오류가 발생했지만 첫 번째 예제에서는 ContributionDate에 ".Year"를 추가하기 만하면됩니다. 고마워요, 고마워요. –

+0

@SteveA 당신이 쿼리를 그대로 작동한다면, 나는'ContributionDate'가 이미 1 년 부분만을 가지고 있다고 가정하고, 첫 번째 해결책을 가지고 갈 것입니다. Linq-to-Entities에서 작동하는 솔루션에 대한 업데이트 된 답변을 확인하십시오. –

+0

감사합니다 pswg. 첫 번째 쿼리는 작동했지만 ContributionDate가 DateTime이므로 첫 번째 주석에서 언급했듯이 .Year를 추가해야했습니다. 훌륭하게 작동합니다. –

관련 문제