我有一个类似的数据库查找:
var configs = dbData.Configs.Where(e => headers.Contains(e.headerId) && e.flag == "true");
if(configs.Any())
{ ... }
其中configs作为IQueryable类型返回。我有时会收到此错误:
System.InvalidOperationException:强制转换为值类型“ Boolean”
失败,因为实例化值为空。要么结果
类型的通用参数,否则查询必须使用可为空的类型。在
System.Data.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader
1.GetValue(DbDataReader reader, Int32 ordinal) at System.Data.Common.Internal.Materialization.Shaper.GetColumnValueWithErrorHandling[TColumn](Int32 ordinal) at System.Data.Common.Internal.Materialization.Coordinator
1.ReadNextElement(Shaper成型机)
System.Data.Common.Internal.Materialization.Shaper
1.SimpleEnumerator.MoveNext() at System.Linq.Enumerable.Single[TSource](IEnumerable
1源)位于System.Linq.Queryable.Any [TSource](IQueryable`1源)
它发生在生产中,看似随机发生,而且我无法在开发中复制它。
编辑添加:Config类型具有外键约束,如果从中强制转换为Boolean类型,我不知道。在实体框架创建的Config类型中没有布尔值,并且在SQL Server中仍然没有布尔值类型。
最佳答案
您的Configs表中有一些数据库列具有可为空的布尔类型,但是要将表条目映射到的C#实体被定义为使用不可为空的布尔值。当查询提供程序填充C#实体时,当它遇到null
值时,它将引发此异常。您需要更新实体对象,以使所讨论的列具有正确的类型。
关于c# - Queryable.Any()返回null吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25246178/