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