我编写了一个电子邮件系统,其中有一个用户表“tblUsers”和一个消息表。用户的收件箱中可以有许多消息(来自 tblusers 中的其他用户)(一个:许多)。
在 tblUsers 表中,有一列名为 ImageURL(字符串),其中包含用户头像的 URL。在本例中,我循环遍历属于用户的收件箱中的消息,我想要做的是,一旦收到消息,就沿着树向上走到 tblUser 并获取 ImageURL 列中的值该消息的所有者(如下标记为“SenderAvatar”)。
这是我尝试过的。问题是,即使我已经确认 ImageURL 有一个值(这是 dev,所以只有三个用户),下面的 SenderAvatar 的子链接也会抛出空指针异常。不知何故,我的逻辑和 linq 的逻辑在这里不一致。有人可以帮忙吗?谢谢!
编辑
我发现了两个错误。第一个错误是 Dzienny
为我指明了比较苹果和橙子的正确方向。第二个错误是 FromUserId = ux.tblUserId,
,我将当前用户 ID 设置为 FromUserId
伙计们,感谢你们对此提供的所有帮助。
public List<UserInboxMsg> GetUserInboxMsg(IKASLWSEntities conx, int userid)
{
var u = (from m in conx.tblUsers where m.Id == userid select m).FirstOrDefault();
if (u != null)
{
return (from ux in u.tblInboxes
orderby ux.CreationTS descending
select new UserInboxMsg
{
CreationTS = ux.CreationTS,
ExpirationDate = ux.ExpirationDate,
FromUserId = ux.tblUserId,
HasImage = ux.HasImage,
ImageId = ux.ImageId ?? 0,
IsDeleted = ux.IsDeleted,
IsRead = ux.IsRead,
MsgId = ux.Id,
MsgSize = ux.MessageSize,
ParentId = ux.ParentId,
Title = ux.Title,
ToUserId = userid,
FromUserName = ux.Title,
SenderAvatar = conx.tblMessages.Where(mu=>mu.Id == ux.Id).FirstOrDefault().tblUser.ImageURL,
Message = ux.Message
}).ToList<UserInboxMsg>();
}
else
{
return new List<UserInboxMsg>();
}
}
}
最佳答案
如果在 Entity Framework 中,两个表之间存在外键引用,您可能可以这样做:
SenderAvatar = conx.tblMessages.FirstOrDefault( mu=>mu.Id == ux.Id).ImageURL,
关于c# - Linq 帮助 - 子查询给出空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31223353/