Я пытаюсь преобразовать запрос SQL в запрос LINQ to entity, но у меня возникли проблемы с блоком LINQ select.
Вот SQL-запрос, который работает так, как ожидалось:
SELECT distinct( p.PendingID,
p.Description,
p.Date,
f.Status,
u.UserName,
m.MapID
FROM Pending p
JOIN Users u
ON p.UserID = u.UserID
LEFT JOIN Forks f
ON p.PendingID = f.PendingID
LEFT JOIN Maps m
ON f.ForkID = m.ForkID
ORDER BY p.Date DESC
Вот запрос LINQ to entity в том виде, в котором он есть у меня:
var pList = (from pending in pendingItems
// JOIN
from user in userList.Where(u => pending.UserID == u.UserID)
// LEFT OUTER JOIN
from fork in forkList.Where(f => pending.ID == f.PendingID)
.DefaultIfEmpty()
// LEFT OUTER JOIN
from map in mapList.Where(m => fork.ID == m.ForkID)
.DefaultIfEmpty()
orderby pending.Date descending
select new
{
ItemID = pending.ID, // Guid
Description = pending.Description, // String
Date = pending.Date, // DateTime
Status = fork.Status, // Int32 (*ERROR HERE*)
UserName = user.UserName, // String
MapID = map.ID // Guid (*ERROR HERE*)
})
.Distinct()
.ToList();
Запрос LINQ завершается ошибкой в одной из следующих 2 строк, которые пытаются присвоить значения, полученные из результатов левого внешнего соединения. Если следующие строки опущены, запрос LINQ завершится без ошибок:
Status = fork.Status,
MapID = map.ID
Почему эти 2 назначения свойств не работают в блоке выбора запроса LINQ?