在LINQ中与OrderBy左连接
问题描述:
我有两个列表。 第一个是从API(APITasks)拉取的任务列表,第二个是我在本地SQL DB上的任务列表。该工具允许用户“声称”APITask,并通过存储TaskIssueId在本地记录该声明。在LINQ中与OrderBy左连接
它可能会不时发生一个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
成为空一切都从那里吹起来。
答
你需要检查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();
这就是我一直在寻找的!谢谢! – LanFeusT
当DefaultifEmpty表中包含相同的值时,您如何使它不同? – gayan1991
@ gayan1991请针对您遇到的具体问题提出一个新问题,我和其他几个人将很乐意尝试回答它。 – cadrell0