【问题标题】:Check ISNULL for boolean value in LINQ query在 LINQ 查询中检查 ISNULL 以获得布尔值
【发布时间】:2021-04-20 03:57:24
【问题描述】:

如何在 LINQ 查询中转换这条 SQL 语句?

ISNULL(IsBlocked,0) = 0

IsBlocked 是表Persons 中的一列。

【问题讨论】:

  • (IsBlocked ?? 0) == 0(IsBlocked == 0 || IsBlocked is null)
  • IsBlocked.HasValue ? IsBlocked.Value : false 这里IsBlocked 数据类型是bool?
  • yes isblocked 是布尔值,我需要检查它是空还是零
  • 您能否提供您的个人表的最小架构,因为我想知道您的 IsBlocked 列的数据类型。

标签: c# sql entity-framework linq linq-to-sql


【解决方案1】:

你可以这样做

var result = from a.IsBlocked in db.Persons where a.IsBlocked == null 
select new { IsBlocked = false}; 

【讨论】:

    【解决方案2】:

    我想我有 2 个解决方案给你。一种用于 INT 或 SMALLINT 数据类型,另一种用于数据库中的 BIT 数据类型。
    如果您的 IsBlocked Column 在 SQL Server 中是 BIT TYPE,那么您可以使用下面给出的代码。

     //This Class Represent as your Table Schema
    public class PersonTableOne
    {
        public int PersonID { get; set; }
        public string Name { get; set; }
        public bool? IsBlocked { get; set; }
    }
    
    void TestMethod1()
    {
            List<PersonTableOne> personItems = new List<PersonTableOne>();
            personItems.Add(new PersonTableOne() { PersonID = 1, Name= "A" ,IsBlocked=null});
            personItems.Add(new PersonTableOne() { PersonID = 2, Name = "B", IsBlocked = true });
            personItems.Add(new PersonTableOne() { PersonID = 2, Name = "C", IsBlocked = false });
    
            var answare = from m in personItems
                          where (m.IsBlocked ?? false) == false
                          select m;
    }
    

    注意: Class 是表的表示,List 是你的表行。
    如果您的 IsBlocked Column 在 SQL Server 中是 INT/SMALLINT 类型,那么您可以使用下面给出的代码。

     public class PersonTableTwo
     {
            public int PersonID { get; set; }
            public string Name { get; set; }
            public int? IsBlocked { get; set; }
     }
     void TestMethod2()
     {
            List<PersonTableTwo> personItems = new List<PersonTableTwo>();
            personItems.Add(new PersonTableTwo() { PersonID = 1, Name = "A", IsBlocked = null });
            personItems.Add(new PersonTableTwo() { PersonID = 2, Name = "B", IsBlocked = 1 });
            personItems.Add(new PersonTableTwo() { PersonID = 2, Name = "C", IsBlocked = 0 });
    
            var answare = from m in personItems
                          where (m.IsBlocked ?? 0) == 0
                          select m;
      }
    

    【讨论】:

      【解决方案3】:

      您可以将字段转换为字符串并检查是否为空或为空。

      String.IsNullOrEmpty(IsBlocked.ToString()) //this is going to be true if IsBlocked = null
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-27
        • 1970-01-01
        • 1970-01-01
        • 2022-01-09
        • 1970-01-01
        • 2017-01-22
        • 1970-01-01
        相关资源
        最近更新 更多