2013-07-12 3 views
2

편집을 반환 :이 질문은 지금 현재 내가 아주 새로운 오전 LINQ를 사용하여 여러 테이블에서 여러 컬럼의 간단한 선택을하려고LINQ 쿼리는 너무 많은 결과를

를 해결된다. 기본적으로 내 모델에 정보 중 일부를 제공하기 위해 내부 조인을 사용하여 여러 테이블의 결과를 결합합니다. 그런 다음 뷰에 전달합니다. 쿼리는 첫 번째 결과 (올바른 결과) 만 반환하고 나타나는 것보다 더 많은 시간을 반환하지만 다른 결과는 표시하지 않습니다. 즉, 다른 결과를 표시하지 않으면 서 첫 번째 결과를 여러 번 반복합니다.

그래서 출력이 같은 말을했는데 경우 (이것은 단지 예입니다)

Name  Task Name Status 
Derp Do the Dishes ACTIVE 
John Example Task COMPLETE 
Jesus Walk on Water IMPOSSIBLE 

대신 내 LINQ 구문에 문제가있는 가정

Name  Task Name Status 
Derp Do the Dishes ACTIVE 
Derp Do the Dishes ACTIVE 
Derp Do the Dishes ACTIVE 
Derp Do the Dishes ACTIVE 
Derp Do the Dishes ACTIVE 
Derp Do the Dishes ACTIVE 
Derp Do the Dishes ACTIVE 
Derp Do the Dishes ACTIVE 
Derp Do the Dishes ACTIVE 

을 말할 것입니다. 여기

내 컨트롤러 관련 부분 : 여기

var TaskInstanceList = taskInstanceService.SelectAll(); 
     var Person = personService.SelectAll(); 
     var Task = taskService.SelectAll(); 
     var Status = statusService.SelectAll(); 

     var NewModel = new TaskLogModelContainer(); 
     NewModel.Tasks = new List<TaskLogModel>(); 

     var results = from ti in TaskInstanceList 
         join p in Person on ti.personID equals p.personID 
         join t in Task on ti.taskID equals t.taskID 
         join s in Status on ti.task_statusID equals s.statusID 
         select new { Person = p, Task = t, Status = s, Instance = ti }; 

     foreach (var result in results) 
     { 
      var obj = new TaskLogModel(); 
      obj.ID = result.Instance.person_taskID; 
      obj.FirstName = result.Person.FirstName; 
      obj.LastName = result.Person.LastName; 
      obj.Description = result.Task.Description; 
      obj.TaskName = result.Task.Name; 
      obj.Value = result.Task.Value; 
      obj.Status = result.Status.Status; 
      obj.Notes = result.Status.Notes; 

      NewModel.Tasks.Add(obj); 
     } 

     return View(NewModel); 

와 나의이다

@model MyProj.Models.TaskLogModelContainer 

@{ 
    ViewBag.Title = "index"; 
} 

<h2>@ViewBag.Title</h2> 

<table> 
    <tr> 
     <th> 
      Name 
     </th> 
     <th> 
      Task Name 
     </th> 
     <th> 
      Status 
     </th> 
    </tr> 

    @foreach (var item in Model.Tasks) 
    { 
    <tr> 
     <td>@item.FirstName @item.LastName</td> 
     <td>@item.TaskName</td> 
     <td>@item.Status</td> 
    </tr> 
    } 
</table> 
+0

가짜 데이터로 코드를 테스트 한 결과 정상적으로 작동합니다. 여기있다 : https://dl.dropboxusercontent.com/u/67454234/Program.cs –

+0

나는 무엇이 문제인지 모르겠다 .... 당신의 쿼리가 여러 행을 기대하는 한 행을 반환하고 있습니까? –

+0

문제를 명확히하기 위해 원래 게시물을 편집합니다 – PlausibleSarge

답변

0

명확히하십시오, 당신의 LINQ 문이 너무 많은 결과 또는 반환하는 경우 데이터의 양 출력은 쿼리와 일치하지 않습니다.

Linq 문이 너무 많은 결과를 반환하면 쿼리를 단일 조인으로 줄일 수 있습니다. 그래서 시작과 함께 :

var results = from ti in TaskInstanceList 
    join p in Person on ti.personID equals p.personID 

다음

var results = from ti in TaskInstanceList 
    join t in Task on ti.taskID equals t.taskID 

비고 :이 텍스트는 주석으로해야 - 내 평판이 하나

+0

첫 번째 행에 대해서만 결과를 얻습니다. 실제 행 데이터가 정확합니다. 행은 약 7 또는 8 번 반복됩니다. – PlausibleSarge

+2

문제가 해결되면 다행입니다. 단지 고려 사항 : "select new {Person = p, Task = t, Status = s, Instance = ti};"대신 " 당신은 TaskLogModel 객체를 직접 인스턴스화 할 수 있습니다 "select new TaskLogModel {FirstName = p.FirstName, ...} – Fried

0

가 해결 작성할 수 없습니다.

내 SelectAll 문 중 하나가 도청되었습니다. 어느 정도 이상한 것이 있습니다. 왜냐하면 나는 그것들을 모두 토륨으로 시험하고 아무런 문제없이 1 시간 전에 그것을 사용했기 때문입니다. 실수로 Ctrl-z'd 키를 누르거나 부딪 혔을 수 있습니다.

+0

'TaskInstanceList'와 관련이 있었다면 그게 범인이 될 수 있습니다. – shahkalpesh