Linq没有正确读取布尔值

时间:2018-01-22 01:56:28

标签: c# database linq boolean

int propertyCount = PropertyHandler.PropertyList.Count(x => x.Owner == charData.CharacterData.CharacterID && !x.IsRegistered);

此行检查属性与所有者ID的关联程度。我知道主人拥有3处房产。 Linq函数的第二部分检查属性是否已注册。业主有2个注册的房产,1个未注册的房产。这意味着它应返回值1,但无论我尝试哪种类型的代码,它总是返回3.

我尝试过以下功能:

int propertyCount = PropertyHandler.PropertyList.Count(x => x.Owner == senderdata.CharacterData.CharacterID && x.IsRegistered == false);

int propertyCount = PropertyHandler.PropertyList.Where(x => x.Owner == senderdata.CharacterData.CharacterID && x.IsRegistered == false).Count();

int propertyCount = PropertyHandler.PropertyList.Where(x => x.Owner == senderdata.CharacterData.CharacterID).Where(x => x.IsRegistered == false).Count();

我也试过在每个函数中没有== false部分。它总是返回3,即使它应该是1.

[Column("IsRegistered")]
public bool IsRegistered { get; set; }

这是IsRegistered的数据库列:

Database Structure

它显示该列的结构,即tinyint。我不知道还能尝试什么。我需要它来返回正确的值(1)而不是3。

1 个答案:

答案 0 :(得分:1)

数据库中

IsRegisteredtinyintAccording to Microsoft, mapping it to bool does not work

您可以通过以下两种方式之一解决此问题:

  • 将类型更改为数据库中的bit。这是SQL Server中映射到C#的bool的类型。
  • 将其映射到byte,并与10进行比较。仅当您无法灵活地更改数据库中的列类型时,才使用此方法。

参考:EF type mapping