2013-05-07 5 views
0

MVC4와 C#을 사용하고 있는데 어떤 이유로 모델을 반복하면서 뷰에 빌드 및 배열을 시도하고 있는데 "제한 시간이 만료되었습니다. 작업이 완료되기 전에 시간 초과 기간이 경과되었거나 서버가 응답하지 않습니다. " 배열 arr1 및 arr2를 빌드하고 ArrTotal이라는 메서드로 보내려고하는 부분을 제거하면 올바르게 작동합니다. 이것은 생각할 줄 모르는 것처럼 보입니다. 왜 그것이 시간 초과를 일으키는 지 알지 못합니다. 이전과 같은 쿼리에서 배열을 작성해야하며 ArrTotal 메서드는 두 배열의 값을 함께 추가하는 것입니다. 서버가 시간 초과되도록 새 쿼리를 수행하지 않아야합니다.면도기보기에서 foreach 루프 내부에 배열을 작성하는 방법

@model Tuple<Namespace.Models.Class1[], Namespace.Models.Class2[]> 
.... 
     @{ 
    int i, x = 0; 
    int[] arr1; 
    int[] arr2; 
    } 
    @foreach (var item in Model.Item1) 
    {    

     arr1[i] = item.count; 
     <tr> 
      <td>@item.year</td> 
      <td>@item.month</td> 
      <td>@item.count</td> 
     </tr> 
     i++; 
    } 
.... 
    @foreach (var item in Model.Item2) 
    {       
     arr2[x] = item.count; 
     <tr> 
      <td>@item.year</td> 
      <td>@item.month</td> 
      <td>@item.count</td> 
     </tr> 
     x++; 
    } 
.... 
    @{   
     int[] total = Namespace.Models.GetTotal.ArrTotal(arr1, arr2);   
    } 
    @foreach (var t in total) 
    { 
    <tr> 
     <td>@t</td> 
    </tr> 
    } 

편집 - 좀 더 많은 정보 : 그 시간이 초과

var start = DateTime.Today.AddMonths(-15); 
var query1 = (from t in db.table1 
        where t.ExportTemplate == "template1" && t.LogDate >= start 
        group t by new { Year = t.LogDate.Year, Month = t.LogDate.Month } into tg 
        orderby tg.Key.Year, tg.Key.Month 
        select new Class1 
        { 
         year = tg.Key.Year, 
         month = tg.Key.Month, 
         count = tg.Select(s => s.ObjectGUID).Distinct().Count() 
        } 
        ); 

     var query2 = (from t in db2.table2 
         where t.UserID == 3 && t.RequestID == 3 && t.ErrorID == 0 && t.LogDate >= start 
         group t by new { Year = t.LogDate.Value.Year, Month = t.LogDate.Value.Month } into tg 
         orderby tg.Key.Year, tg.Key.Month 
         select new Class2 
         { 
          year = tg.Key.Year, 
          month = tg.Key.Month, 
          count = tg.Select(s => s.GID).Distinct().Count() 
         } 
        ); 
     return View(System.Tuple.Create(query1.ToArray(), query2.ToArray())); 

의 반환보기 : 이 내가 두 개의 쿼리를 실행하고있는 컨트롤러입니다. 내가 말했듯이,보기에서 배열을 만들려고하지 않는 한 작동합니다.

+0

오류가 발생했습니다. 빈 배열을 선언하고 존재하지 않는 인덱스에 값을 할당하기 만하면됩니다. 나는 왜 당신에게 오류를주는 대신에 시간 초과가되는지 모르겠다. –

+0

글쎄, 각 배열의 15 개 이상의 인덱스를 가질 수 없다. int []와 같은 15 개의 슬롯을 가진 배열을 선언하려고 시도했다. arr1 = new int [15]; –

+0

OK ... 시간이 어디입니까? 시간이 초과되었다고 말하는 코드 행은 무엇입니까? –

답변

1

ToArray를 호출하면 컨트롤러에서 평가됩니다. 데이터베이스가 충돌합니다. 그러나 엔티티 프레임 워크를 사용하고 있습니까? 그렇다면 컨텍스트에 바인딩되어 있고 게으른로드 및 모든 것일 수 있습니다. 개체를 분리했는지 확인하십시오.

사용하는 전체 방법에 문제가있을 수 있습니다.

+0

Yepp 저는 엔티티 프레임 워크를 사용하고 있습니다. 끝을위한 Thnx, 나는 그것을 조사 할 것이다. –