【问题标题】:Linq does not read boolean correctly [duplicate]Linq 无法正确读取布尔值 [重复]
【发布时间】:2018-06-30 14:55:28
【问题描述】:

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 的我的数据库列:

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

【问题讨论】:

    标签: c# database linq boolean


    【解决方案1】:

    IsRegistered 在您的数据库中是 tinyint。 According to Microsoft, mapping it to bool does not work.

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

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

    参考:EF type mapping。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      • 2019-03-09
      • 1970-01-01
      相关资源
      最近更新 更多