我有这条线
if (EF.ctx.Searches.Any(x => x.SearchTerm == _searchTerm && x.IpAddress == ip && x.Time > dtRecent))
随机抛出此错误(很少,不可重现)
演员价值类型'布尔'失败,因为具体化值为null。结果类型的通用参数或查询必须使用可空类型。
在数据库中,只有IpAddress可以为空(但到目前为止,没有带有空IpAddress的记录)。
每次抛出错误时,都没有变量为空。
最接近的类似问题是Queryable.Any() returning null?
但是这个错误对我来说仍然没有意义。
我真的很好奇,那条线上的 null 究竟是什么?
堆栈跟踪:
at 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(Shaper shaper) 在System.Data.Common.Internal.Materialization.Shaper1.SimpleEnumerator.MoveNext() at System.Linq.Enumerable.Single[TSource](IEnumerable
1来源) 在System.Data.Objects.ELinq.ObjectQueryProvider.b__3 [TResult](IEnumerable1 sequence) at System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable
1查询,表达式queryRoot) 在System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute [S](表达式表达式) 在System.Linq.Queryable.Any [TSource](IQueryable1 source, Expression
1谓词) 在[我的代码,上面的行]
答案 0 :(得分:0)
我认为不是导致此错误的表内容,而是查询中的一个变量:_searchTerm
或ip
或dtRecent
必须具有无效值且无法转换为有效的sql查询或查询包含无效值。
将记录附加到Database.Log
并检查EF创建的查询:
using (var context = new YourContext())
{
context.Database.Log = Console.Write;
// Your code here...
}
上找到更多信息
答案 1 :(得分:-1)
在我的情况下,就像数据库有一些变化,所以我们清理了一些表,就是这样。
我的意思是修改你的数据库。