我正在努力实现以下目标......
_4S.NJB_Request request =
(from r in db.NJB_Requests
where r.RequestId == referenceId
select r).Take(1).SingleOrDefault();
获得以下异常......
Message:
The null value cannot be assigned to a member with type System.Int32 which is a non-nullable value type.
StackTrace:
at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
at System.Data.Linq.DataQuery`1.System.Linq.IQueryProvider.Execute[S](Expression expression)
at System.Linq.Queryable.SingleOrDefault[TSource](IQueryable`1 source)
at DAL.SqlDataProvider.MarkNJBPCRequestAsComplete(Int32 referenceId, Int32 processState)
我已经确认'referenceId'确实有值。
任何人都知道为什么会在select语句中发生这种情况?
谢谢!
编辑:r.RequestId = NOT NULL Int,referenceId = int
答案 0 :(得分:1)
r.RequestId可以为空吗?然后你会使用:
_4S.NJB_Request request =
(from r in db.NJB_Requests
where r.RequestId == (int?)referenceId
select r).FirstOrDefault();
您的DC是否与数据库保持同步?也许你在数据库中有一个空值被分配给一个int,因为你的模型没有与数据库同步
答案 1 :(得分:0)
我认为Take调用是多余的,并且让SingleOrDefault不会将您从异常中保存起来,尝试用FirstOrDefault替换Take(1).SingleOrDefault:
(from r in db.NJB_Requests
where r.RequestId == referenceId
select r).FirstOrDefault();
编辑:将SingleOrDefault更改为FirstOrDefault,以避免在返回超过1个项目时出现异常。