게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
너무 많은 for문과 if문.... 해결 방법 없을까요 ?
게시물ID : programmer_15156짧은주소 복사하기
작성자 : 하린
추천 : 0
조회수 : 1027회
댓글수 : 21개
등록시간 : 2015/12/24 14:35:57
母회사  |  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값을 넣어줘야 하나요 ?
         
 
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호