Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.NET MVC中处理错误的布尔数据_C#_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# 在ASP.NET MVC中处理错误的布尔数据

C# 在ASP.NET MVC中处理错误的布尔数据,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我有一个MVP应用程序,它使用EntityFramework从SQL数据库读取数据。这些数据是从外部CMS网站数据库复制的,因此数据并不总是可靠的 我读到的其中一个字段在SQL中是“bit”数据类型,是1或0,ASP.NET MVC希望它是一个布尔值,否则我会在将布尔值转换为int时出错 问题是有时候数据库中的位值可能为空,这会使我的MVC应用程序崩溃。我不能检查NULL,因为我得到的错误是布尔数据类型只能是true或false 例子 型号 namespace Foo.Models {

我有一个MVP应用程序,它使用EntityFramework从SQL数据库读取数据。这些数据是从外部CMS网站数据库复制的,因此数据并不总是可靠的

我读到的其中一个字段在SQL中是“bit”数据类型,是1或0,ASP.NET MVC希望它是一个布尔值,否则我会在将布尔值转换为int时出错

问题是有时候数据库中的位值可能为空,这会使我的MVC应用程序崩溃。我不能检查NULL,因为我得到的错误是布尔数据类型只能是true或false

例子 型号

namespace Foo.Models
{
    [Table("provider")]
    public class Bar
    {
        //can't check for null here, getter and setter only allow boolean
        public Boolean FooBar { get; set; }
    }
}
控制器

namespace Foo.Controllers
{
    public ActionResult BarList()
    {
         //Can't check for null here, because if(Boolean == null) will always evaluate to false
         List<Bar> bars = db.Bar.ToList();
         return View(bars);
    }
}
名称空间Foo.Controllers
{
public ActionResult BarList()
{
//此处无法检查null,因为if(Boolean==null)的计算结果将始终为false
列表条=db.Bar.ToList();
返回视图(条);
}
}

如果FooBar为NULL,则视图中会抛出一个错误,即布尔值中不能有NULL。如何处理这种情况?

您可以将布尔值
设为可空。这意味着您的bool可以有值,也可以没有值:

公共布尔值?FooBar{get;set;}

您可以使用
空值

可空结构的两个基本成员是 HasValue和Value属性。如果 如果为Nullable对象,则可以访问该对象的值 使用Value属性。如果HasValue属性为false,则 对象的属性未定义,尝试访问Value属性 抛出InvalidOperationException

您可以使用泛型(也可以表示为
bool?
):


@丹尼斯……我明白你的意思!FooBar.HasValue()但不是| | FooBar.Value。你能解释一下吗?是的,这让我走上了正确的道路!这就是我真正需要让它完全工作的东西(我过度简化了我的示例)。List Bar=db.Bar.Where(w=>(w.FooBar.HasValue&&(w.FooBar==true)).ToList()编译器错误:运算符“&&&”不能应用于“bool”和“bool”类型的操作数
public Boolean? FooBar { get; set; }
Nullable<bool> nullableBool;
bool realBool = (nullableBool.HasValue && nullableBool);

// or

if (nullableBool == true) { ... } // true
else { ... } // false or null