3
我试图将SQL查询转换为LINQ到实体查询,但我遇到了LINQ 选择块的问题。LINQ to Entities - Multiple Joins - Null Reference Exception on'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到实体查询,因为我有它迄今:在任的
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查询失败以下两行,它们试图分配从左外部连接检索结果中检索的值。如果以下的行被省略,LINQ查询完成,没有错误:
Status = fork.Status,
MapID = map.ID
为什么这些2属性分配的LINQ查询的选择块中的失败?
你实际上是否对EF或内存中的数据库传真运行?其次,这是在LINQPad中的代码,你可以检查生成的SQL(如果对EF)? – 2010-12-21 18:30:27
我认为这是一个编译器错误,这就是为什么他可以在两条线上看到错误。 – tster 2010-12-21 18:32:41