2013-06-03 5 views
-1

image1과 비슷한 테이블에서 데이터를 컴파일하고이를 image2와 같은 테이블로 변환하여 표시하려고했습니다. 클래스라는 서버 서버의 목록을 포함 하나 개의 클래스라는 지역 :linq을 사용한 합계 및 그룹화

이미지 1

img1 http://i44.tinypic.com/fjesl2.png

이미지 2

img1 http://i39.tinypic.com/el790o.png

먼저 내가 같이 할 것입니다 생각 클래스에는 serverid, servername이라는 세 가지 속성과 CostData라는 클래스 목록이 있습니다. CostData는 해당 월의 연간 월 및 비용 합계를 저장합니다.

내가 좋아하는, 한 달에 각 서버에 대해 나에게 총을 제공하는 쿼리를 얻을 LINQ로 처리했다 : 총 서버 1을, :, 2013 년 월 : 1, 서버 (460) 아직

나 자신 짧은 찾기 몇 가지. 먼저 각 서버의 월간 합계를 한 곳에서 계산해야합니다. 예를 들어 CostData로 시도한 것과 마찬가지로 html로 각 서버를 반복하고 열로 표시 할 수 있습니다.

또한이 솔루션을 사용하여 아직 Image2에 대한 월간 총계를 표시하려는 CostDesc 열을 놓쳤습니다.

여기 내 클래스는 다음과 같습니다

public class Region 
{   
public List<Server> Servers { get; set; } 
} 

public class Server 
{    
public string ServerID { get; set; } 
public string ServerName { get; set; } 
public List<CostData> MonthlyCosts { get; set; } 
} 

public class CostData 
{ 
public string Date { get; set; } 
public double Sum { get; set; } 
} 

이것은 내가 내 개체를 건물입니다 방법은 다음과 같습니다

Region r = new Region(); 
r.servers = new List<Server>(); 

foreach (var row in linqQueryResult) 
    { 
      Server s = new Server(); 
      s.ServerID = row.ServerID; 
      s.ServerName = row.ServerName; 
      s.MonthlyCosts = new List<CostData>(); 
      CostData cd = new CostData(); 
      cd.Date = row.Year.ToString() + "-" + row.Month.ToString(); 
      cd.Sum = row.ServerSum; 
      s.MonthlyCosts.Add(cd);      
      r.Servers.Add(s); 

    } 


    return View(r); 

당신은 어떤 포인터이나 제안 사항이 있습니까? 나는 더 많은 경험을 가진 누군가가 한 번 봐서 내게 조언을 해줄 수 있기를 바랄 뿐이다. 비록 당신이 그것을 원한다면 나는 괜찮을 지 모르지만, 나는 전체적인 해결책을 요구하지 않는다.

좋은 것이 없는지 궁금하다. 방법은 내가 linq를 사용하여 원하는 데이터를 얻을 수 있습니다. 이 catch는 image1과 같은 데이터 만 제공하는 저장 프로 시저에만 액세스 할 수 있다는 것입니다. 데이터를 사용한 모든 조작은 C#으로 로컬에서 수행해야합니다.하지만 그렇게 나쁜 것은 아닙니다.

+0

날짜에'string' 대신에'DateTime'을 사용하거나 적어도 Month와 Year에 대해'int' 필드를 분리하는 것이 더 쉬울 것입니다. 그럴 수 있니? 또한 서버 당 하나의 'CostData'만 추가하는 것 같습니다 ... –

+0

날짜를 DateTime으로 만드는 것은 문제가되지 않습니다. 각 서버의 모든 월별 통계를 한 곳으로 가져 오는 것은 제가 문제가있는 것 중 하나입니다. 나는 어떻게 든 해시 테이블이나 사전을 사용하여 어떻게 든 그들을 함께 구축해야한다. –

+0

클래스/인스턴스화 구문을 약간 재구성해도 되겠습니까? –

답변

2

일반적으로 PIVOT 또는 크로스 탭으로 알려진 작업을 수행해야합니다. 이것은 다음과 같이 도움이됩니다 : Is it possible to Pivot data using LINQ?

그런 다음 특별한 총 행을 추가 한 다음 사용자 정의 정렬 순서를 추가하는 합계 기능을 수행하려는 것으로 보입니다. 피벗을 끝내면 나머지는 상당히 쉽습니다.

피벗을 완료 한 후에 별도의 쿼리를 수행하여 행을 합계 (그룹화) 할 수 있습니다. 그런 다음 두 결과를 결합합니다. 정렬 열을 추가하면 결과를 정렬하고 최종 결과 집합을 얻을 수 있습니다.

+0

고맙습니다. 지금은 피벗을 관리해 봤습니다. 한 걸음 더 가까이에 –