实体框架:Right Outer Join抛出NullException

时间:2018-02-15 01:29:11

标签: c# entity-framework

var list = DB.MODULE_USER_PAGE.SqlQuery("select * from MODULE_ADMIN a right outer join MODULE_USER_PAGE b on a.ID = b.ID and USERID = @id", new SqlParameter("@id", id))
                    .AsEnumerable().Select(c => new UserMenuViewModal
                    {

                        USERPAGE = c.MODULE_NORMAL_PAGE


                    }).ToList();

以上代码抛出

  

System.NullReferenceException:未将对象引用设置为实例   一个对象。

这是我的参数,传递给SqlServer。

exec sp_executesql N'select * from MODULE_ADMIN a right outer join MODULE_USER_PAGE b on a.ID = b.ID and USERID = @id',N'@id nvarchar(4)',@id=N'2430'

enter image description here

如果在sql server中执行,这是我查询的结果。

我是否因为空值而收到此错误?

2 个答案:

答案 0 :(得分:1)

如果结果集的第一列为null,则EF将返回null对象。

因此,您应该确保在第一个字段显式命名列。(如PK)

var list = DB.MODULE_USER_PAGE.SqlQuery("select b.ID,b.MODULE_NORMAL_PAGE from MODULE_ADMIN a right outer join MODULE_USER_PAGE b on a.ID = b.ID and USERID = @id", new SqlParameter("@id", id))
                                .AsEnumerable().Select(c => new UserMenuViewModal
                                {
                                    USERPAGE = c.MODULE_NORMAL_PAGE
                                }).ToList();

答案 1 :(得分:1)

您可以在查询中定义列,并添加ISNULL以使用空字符串替换值而不是null。

var list = DB.MODULE_USER_PAGE.SqlQuery("SELECT 
                                            ISNULL(b.ID, '') [ID],
                                            ISNULL(b.MODULE_NORMAL_PAGE,'') [MODULE_NORMAL_PAGE]
                                        FROM 
                                            MODULE_ADMIN a 
                                            RIGHT OUTER JOIN MODULE_USER_PAGE b on a.ID = b.ID AND USERID = @id", new SqlParameter("@id", id))
                                .AsEnumerable().Select(c => new UserMenuViewModal
                                {
                                    USERPAGE = c.MODULE_NORMAL_PAGE
                                }).ToList();

然后你可以通过这样做检查USERPAGE是否有价值: string.IsNullOrEmpty(USERPAGE)