c# - Linq 帮助 - 子查询给出空指针异常

标签 c# linq entity-framework subquery

我编写了一个电子邮件系统,其中有一个用户表“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/

相关文章:

c# - 装饰模式问题C#/java

c# - 实时多人房间创建进度停留在 20%

sql - LINQ-to-SQL 是否支持可组合查询?

entity-framework - EF4 LINQ 排序父集合和所有具有急切加载 (.Include()) 的子集合

c# - 将 ASP.Net Identity DbContext 与我的 DbContext 合并

c# - bool ?比较 bool vs GetValueOrDefault vs ??运算符(operator)

c# - 更改 DataGridTemplateColumn 内容样式

c# - 使用 Lambda OrderBy Comparer 为特定字符串值赋予权重

c# - 在一个 Linq to Entities 查询中多次实现 "like"运算符

entity-framework - 如何在 EF Code First 中对表进行单一化?