我有一个类似的数据库查找:

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/

10-17 02:38