在LINQ中与OrderBy连接

时间:2011-12-01 23:25:44

标签: c# .net linq left-join

我有两个清单。 第一个是从API(APITasks)中提取的任务列表,第二个是我在本地SQL DB上的列表任务。该工具允许用户“声明”APITask并通过存储TaskIssueId在本地记录该声明。

可能会发生APITask不时被删除的情况。我的工具有代码,当用户列出所有“声称”的任务时,会注意到并向用户提及。 现在我遇到的问题是让用户的任务通过APITasks排序(按AnotherInternalId排序,这是另一个Id,复杂且不相关),如果任何任务不再可用,仍然显示它(我的代码捕获了异常并显示消息。)

这是我的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中不存在的本地任务时,d变为空,一切都从那里。

2 个答案:

答案 0 :(得分:6)

您需要检查d不为null,而不是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();

答案 1 :(得分: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();