gpt4 book ai didi

c# - 即使异常将 DbNull 作为类型抛出,也无法将具有空值的 DbGeometry 与 DbNull 进行比较

转载 作者:太空宇宙 更新时间:2023-11-03 12:40:25 25 4
gpt4 key购买 nike

如标题所示,我有一个代码,当数据库中没有几何图形并且 DbGeometry 获得空值时,我会收到带有空值的 DbNull 类型。但是当我想做一个 if 语句来检查 DbGeometry 是否等于 DbNull.Value 时,我不能那样做。它是这样的:

var geom = entity.Select(entity => entity.Geom);
if (geom == DbNull.Value) return null; // Here it is not valid for VisualStudio

但是当我做那样的事情时:

if (geom == null) return null;

它工作得很好。为什么当我尝试将 DbGeometry 类型的 geom 变量与 DbNull.Value 进行比较时出现错误,即使没有处理 null 我得到的是 DbNull 类型。

最佳答案

COM 互操作使用 DBNull 来区分 VT_NULL 变体和 VT_EMPTY 变体。

不要将面向对象编程语言中的 null 概念与 DBNull 对象混淆。在面向对象的编程语言中,null 表示不存在对对象的引用。 DBNull 表示一个未初始化的变体或不存在的数据库列

"备注DBNull 类代表一个不存在的值。例如,在数据库中,表的一行中的列可能不包含任何数据。也就是说,该列被认为根本不存在,而不仅仅是没有值。 DBNull 对象表示不存在的列。此外,COM 互操作使用 DBNull 类来区分 VT_NULL 变体(指示不存在的值)和 VT_EMPTY 变体(指示未指定的值)。”

https://msdn.microsoft.com/en-us/library/system.dbnull(v=vs.110).aspx

在 EF 中,您不必使用 DBNull,只需定义可空属性,如果您有引用类型,则只需将相关 ID 设置为可空!

更多信息:

What is the point of DBNull?

关于c# - 即使异常将 DbNull 作为类型抛出,也无法将具有空值的 DbGeometry 与 DbNull 进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39204250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com