Оставьте соединение с OrderBy в LINQ - PullRequest
4 голосов
/ 02 декабря 2011

У меня есть два списка. Первый - это список задач, извлекаемых из API (APITasks), второй - список задач, которые я имею в своей локальной БД SQL. Инструмент позволяет пользователям «требовать» 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();

Эта нить помогла создать этот запрос, но я продолжаю получать ошибку исключения из нулевой ссылки, потому что, когда запрос достигает локальной задачи, которой нет в APITask, d становится нулевым и все взрывается из есть.

Ответы [ 2 ]

6 голосов
/ 02 декабря 2011

Вам нужно проверить, что 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 голос
/ 02 декабря 2011
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();
...