在LINQ中左连接order

本文关键字:连接 order LINQ | 更新日期: 2023-09-27 18:16:29

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

有时会发生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();

这个线程帮助创建该查询,但我一直得到一个空引用异常错误,因为当查询到达APITask中不存在的本地任务时,d变为空,一切都从那里吹起来。

在LINQ中左连接order

您需要检查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();
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();