2011-12-01 2 views
3

두 개의 목록이 있습니다. 첫 번째는 API (APITasks)에서 가져온 작업 목록이고, 두 번째는 로컬 SQL DB에있는 목록 작업입니다. 이 도구를 사용하면 사용자가 APITask를 "요청"하고 TaskIssueId를 저장하여 해당 클레임을 로컬에 기록 할 수 있습니다.LINQ의 OrderBy와 왼쪽 조인

때때로 APITask가 제거 될 수 있습니다. 내 도구에는 사용자가 "청구 된"모든 작업을 나열 할 때이를 알아 채고 사용자에게 언급하는 코드가 있습니다. 이제 내가 겪고있는 문제는 APITasks (다른 ID, 복잡하고 관련이없는 AnotherInternalId로 정렬 됨)를 통해 사용자의 작업이 정렬되고 더 이상 사용할 수없는 작업이 더 이상 표시되지 않는다는 것입니다. 예외 및 메시지 표시).

가 여기 내 SQL 쿼리입니다 :

myTasks = (from m in myTasksFiltered 
      join d in APITasks on m.TaskIssueId equals d.TaskIssueId 
       into joinedData 
      from d in joinedData.DefaultIfEmpty() 
      let index = (int?)d.AnotherInternalId ?? 0 
      orderby index 
      select m).ToList(); 

thread가 쿼리를 만드는 데 도움하지만 난 쿼리가 APITask에 존재하지 않는 로컬 작업에 도달 할 때 때문에 null 참조 예외 오류가 계속 d가 null이된다 거기에서 모든 것이 폭발합니다.

답변

4

당신은 그 D를 확인해야 할 것은 더 이상 충돌하지 않는 AnotherInternalId

myTasks = (from m in myTasksFiltered 
      join d in APITasks on m.TaskIssueId equals d.TaskIssueId 
       into joinedData 
      from d in joinedData.DefaultIfEmpty() 
      let index = d == null ? 0 : d.AnotherInternalId 
      orderby index 
      select m).ToList(); 
+0

그게 정확히 내가 찾고 있었던 것입니다! 감사! – LanFeusT

+0

DefaultifEmpty 테이블에 동일한 값이 포함 된 경우 어떻게해야합니까? – gayan1991

+0

@ gayan1991 발생한 특정 문제로 새로운 질문을하면 나와 다른 여러 사람들이 기꺼이 답변 해 드리겠습니다. – cadrell0

1
myTasks = (from m in myTasksFiltered 
     join d in APITasks on m.TaskIssueId equals d.TaskIssueId 
      into joinedData 
     from d in joinedData.DefaultIfEmpty() 
     where d != null 
     let index = (int?)d.AnotherInternalId ?? 0 
     orderby index 
     select m).ToList(); 
+0

, null가 아닌 아니지만,이 항목을 무시하기 때문에 D 내가 가입 왼쪽을하지 않는 널 (null)입니다. 예를 들어'myTasksFiltered'에 10 개의 항목이 있고'APITasks'에 9 개의 항목이 있다면'AnotherInternalID = 0'이면서 10을 얻고'where d! = null'을 사용하면 10을 얻을 수 있습니다. – LanFeusT

+0

여기서 d! = null은 왼쪽 조인을 무시합니다. – cadrell0