完整的错误消息:
转换为值类型'Boolean'失败,因为具体化值为null。结果类型的泛型参数或查询必须使用可空类型。
代码:
var messages = ctx.tblMessageQueue.Where(o => o.Status == status && o.Region == region);
//o.Status is a byte type and not nullable, o.Region is an int type and not nullable.
if(messages != null && messages.Any()) => Triggers the Error
{...
}
StackTrace是:
在 System.Data.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader
1.GetValue(DbDataReader reader, Int32 ordinal) at lambda_method(Closure , Shaper ) at System.Data.Common.Internal.Materialization.Coordinator
1.ReadNextElement(整形器 塑造者 System.Data.Common.Internal.Materialization.Shaper1.SimpleEnumerator.MoveNext() at System.Linq.Enumerable.Single[TSource](IEnumerable
1 source)at System.Data.Objects.ELinq.ObjectQueryProvider.b__3 [TResult](IEnumerable的1 sequence) at System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable
1 查询,表达式queryRoot)at 在System.Linq.Queryable.Any [TSource](IQueryable`1 source)
答案 0 :(得分:1)
您的tblMessageQueue
表中的某个列值可能是NULL
,而实体类中的相应属性类型为bool
。如果是这种情况,我可以考虑以下两个建议:
NULL
bool?
答案 1 :(得分:0)
我认为你需要这样的东西:
var messages = ctx.tblMessageQueue.Where(o => o.Status == status && o.Region == region)
.Where(o => o.Status != null);
我不确定语法,但您只需要确保空状态消息不会使其成为新变量。
这是一个示例/类似问题 - Multiple Where clauses in Lambda expressions
答案 2 :(得分:0)
检查Message表中的任何其他属性是否为空值,如果Message表包含可空整数,那么您应该考虑将Message Entity类更改为“int?”类型。