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'
如果在sql server中执行,这是我查询的结果。
我是否因为空值而收到此错误?
答案 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)