2011-03-25 4 views
4

많은 연구를 수행했지만 여전히 어려운 작업을 수행했습니다. 트랜잭션 테이블이 "CreatedOn", "Amount", "Type"인 데이터베이스를 생각해보십시오. 엔티티 쿼리를 수행하여 다른 유형의 세분화 (월/일 등)로 그룹화 된 특정 유형의 트랜잭션을 가져올 수 있어야합니다.Linq to Entity Group 날짜별로

2011-1 $300 1deposit 
2011-2 $340 1deposit 
2011-3 $150 2deposits 

을 그때에이 쿼리를 적용 할 방법이 얻을 수 있도록 내가 월별로 그룹화 모든 예금을 끌어 것 쿼리를 가질 수

2011/1/22 $300 Deposit 
2011/2/18 $340 Deposit 
2011/3/6 $200 Other 
2011/3/6 $100 Deposit 
2011/3/7 $50  Deposit 

:

그래서있는 테이블을 상상 달보다 오히려 하루 일까?

여기에 코드 내 현재 블록이다 그러나 나는

은 A1

에없는 그룹
var result = context.TransactionEntities.Where(d => d.Type == "Deposit")          
        .GroupBy(g => new { g.CreatedOn.Year, g.CreatedOn.Month }) 
        .Select(g => new 
          { 
           DateKey = g.Key, 
           TotalDepositAmount = g.Sum(d => d.Amount), 
           DepositCount = g.Count() 
          }).ToList(); 

참고 할 수있는 내부 LINQ 예외 얻을 : 나는 현재 MySQL의 커넥터를 사용하고 나 '에게 아마도 이것이 버그일까요?

+0

LINQ에서 EF로 정확히 비슷한 기능을 구현하려고하지만 아직 성공하지 못하고 있습니다. 제대로 작동합니까? –

답변

1
Func<DateTime, object> groupByClause; 
if (groupByDay) groupByClause = date => date.Date; 
else if (groupByMonth) groupByClause = date => new { date.Year, date.Month}; 
else throw new NotSupportedException("Some option should be chosen"); 

var result = data.Where(d => d.Type == "Deposit") 
       .GroupBy(groupByClause) 
       .Select(g => new { DateKey = g.Key, 
            TotalDepositAmount = g.Sum(d => d.Amount), 
            DepositCount = g.Count(), 
       }); 

물론 linq-2-entities가 허용할지 여부를 확인해야합니다.

+0

이봐, 이건 매우 견고 해 보인다. 나는 그것을 시도하고 내부 예외 'A1에 그룹화 할 수 없다'를 얻는다. 내 쿼리는 다음과 같습니다. var result = context.TransactionEntities.Where (d => d.Type == "Deposit") .GridBy (g => new {g.CreatedOn.Year, g.CreatedOn.Month}). 선택 (g => new { DateKey = g.Key, TotalDepositAmount = g.Sum (d => d.Amount), DepositCount = g.Count()}). ToList(); –

0

이것은 아마도 MySQL 커넥터의 버그 일 것입니다. 내 솔루션은 .GroupBy() 앞에 .ToList()을 배치하는 것이 었습니다.

+0

그래,이 문제는 ToList가 SQL 쿼리를 실행하고 그 다음에 그룹이 로컬 일 것이므로 많은 양의 데이터를 가져올 수 있습니다. –

+1

@nextgenneo 예,하지만 아무것도하지 않는 것보다 낫습니다. :) – HiveHicks