2012-06-27 7 views
2

많은 데이터를 그룹화하려고합니다.linq 그룹 별 조건 및 날짜 그룹

public class TransactionsViewModel 
{ 
    public string BusinessName { get; set; } 
    public string Description { get; set; } 
    public int TransactionTypeId { get; set; } 
    public string TransactionType { get; set; } 

    [Display(Name = "Transaction Amount")] 
    public decimal TransactionAmount { get; set; } 

    [Display(Name = "Transaction Date")] 
    public DateTime TransactionDateTime { get; set; } 

} 

나는이에 대한 몇 가지 그룹을하고자하고 그래서 BUSINESSNAME에 의해

public class BusinessTransaction 
{ 
    public string Name { get; set; } 
    public List<Transaction> Transactions { get; set; } 
} 

public class Transaction 
{ 
    public decimal TransactionAmount { get; set; } 
    public string Description { get; set; } 
    public DateTime TransactionDate { get; set; } 
    public string TransactionType { get; set; } 

} 

그래서 내가 할 수있는 그룹과 같은 두 개의 클래스를 생성하는 간단

나는 데이터의 목록을 가지고

var data = from c in transactions 
        group c by c.BusinessName 
        into business 
        select new BusinessTransaction() 
           { 
            Name = business.Key, 



           }; 

어떻게 TransactionDateTime.Date로 트랜잭션을 지금 그룹화 할 수 있습니까?

var data = from c in transactions 
      group c by c.BusinessName 
      into business 
      select new BusinessTransaction 
      { 
       Name = business.Key, 
       Transactions = business.OrderBy(t => t.TransactionDateTime) 
             .ToList() 
      }; 

편집 : 나는

BusinessName 
    28-06-12 
    Transaction 
    Transaction 
    27-06-12 
    Transaction 
BusinessName 
    28-06-12 
     Transaction 
+0

는 '목록 거래를 {얻을 변경하십시오; 세트; }' to IEnumerable > Transactions {get; 세트; } ' – pnvn

답변

1

처럼 다시 클라이언트에 데이터 구조를 보내려하고 난 당신이 뭔가를 할 생각은 당신이 당신의 현재 BusinessTransaction 클래스를 지원할 수있는 모든 구조입니다. 그룹화를 직접 지원하려면 해당 그룹에 다른 수준의 중첩을 추가해야합니다.

그러나, 기존의 구조를 사용하여 클라이언트는 항상 그룹 일 자체는 할 수

foreach (var business in query) 
{ 
    Console.WriteLine(business.Name); 
    foreach (var group in business.Transactions 
            .GroupBy(t => t.TransactionDateTime.Date)) 
    { 
     Console.WriteLine(" {0}", group.Key); 
     foreach (var transaction in group) 
     { 
      Console.WriteLine(" {0}", transaction.Description); 
     } 
    } 
} 
+0

영업 사원이 회사 이름 * 및 *을 날짜순으로 그룹화하려고합니다. –

+0

@ThomasLevesque : 아 - 질문에 대답하기 시작했을 때 예가 있었는지 잘 모르겠습니다. 나는 그것을 어떻게 할 수 있는지 보여주기 위해 편집했습니다 ... –

+0

Thanks @Jon Skeet. 나는 linq을 사용할 수 없도록 클라이언트에 json으로 데이터를 보냈다. 나는 다른 클래스와 그룹을 만들 것이다. –