母회사 | 1차_하청업체 | 2차_하청업체 | 2차_하청업체_관리자 | 관리하는_기계 | 관리_시간
A A-01 A-01-01 M_A01_01 M_A_E-01 10
A A-01 A-01-01 M_A01_01 M_A_E-02 20
A A-01 A-01-02 M_A01_02 M_A_E-01 20
A A-01 A-01-02 M_A01_02 M_A_E-03 05
A A-02 A-02-01 M_A02_01 M_A_E-05 55
A A-02 A-02-02 M_A02_02 M_A_E-01 11
B
... (생략)
이런식으로 데이터 테이블이 구성되어 있습니다.
처음엔 母회사 선택하면 Group by 하여 해당 기계에 대한 관리 시간 총 합계를 구한 후 아래와 같이 데이터를 뿌려주었습니다.
母회사 | 관리하는_기계 | 관리_시간
A M_A_E-01 44
A M_A_E-02 20
A M_A_E-03 05
A M_A_E-05 55
total 124
B
... (생략)
var results2 = (from J3 in TotalLowDataTable.AsEnumerable().Distinct()
group J3 by new { P = J3.Field<string>("母회사"), Equipment = J3.Field<string>("관리하는_기계")} into ss
select new
{
PName = ss.Key.Site,
EquipmentName = ss.Key.Equipment,
Sum = ss.Sum(r => r.Field<int>("관리_시간"))
}).Distinct();
for (int i = 0; i < 母회사.Count; i++)
{
for (int j = 0; j < 관리하는_기계.Count; j++)
{
foreach (var item in results2)
{
if (母회사[i] == item.母회사이름)
{
if (관리하는_기계[j] == item.기계이름)
{
DataTable.Rows.Add(item.母회사이름, item.기계이름, item.관리시간);
Sum = Sum + item.관리시간;
}
}
}
DataTable.Rows.Add("Total", "", Suml);
Sum = 0;
}
}
세부 내용이 더 필요하다고 판단하여
母회사 | 1차_하청업체 | 2차_하청업체 | 2차_하청업체_관리자 | 관리하는_기계 | 관리_시간
다시 이렇게 뿌려주게 되는데... 중간에 total을 넣어야 해서 각각 갯수만큼 for문으로 돌리고 if문으로 일치하는 형식으로 해서 위의 소스와 같은 형식이나
for(母회사)
{
for(1차_하청업체)
{
for(2차_하청업체)
{
for(2차_하청업체_관리자)
{
for(관리하는_기계)
{
foreach (var item in results2)
{
if(테이블의 母회사의 이름이 母회사가 같은가?)
{
if(테이블의 1차하청업체의 이름이 1차하청업체가 같은가?)
{
if(테이블의 2차하청업체의 이름이 2차하청업체가 같은가?)
{
if(테이블의 2차합청업체의 관리자 이름이 ...)
{
if(테이블의 관리하는 기계의 이름이 ...)
{
모든 if만족시 DataTable.add
}
....
}
...
total값 DataTable.add
}
옮겨 적으면서 {,}의 갯수가 맞지 않을 수가 있습니다 괄호 갯수 안맞는건 무시해주시고...
이런식으로 너무 많은 for와 if가 들어감에 따라 데이터 테이블에 들어가는 데이터 속도가 많이 저하됩니다.
좀 무식한 방법으로 해결을 한거 같은데 ... 다른 방법으로 하려면 어떻게 해야하나요 ?
아니면 母회사 1차하청업체 2차하청업체 2차하청업체괸리자 관리하는기계 순으로 정렬을 시킨 후에 각각 중간마자 total값을 넣어줘야 하나요 ?