【问题标题】:Column of boolean always return false in sql query布尔值列在 sql 查询中总是返回 false
【发布时间】:2019-06-10 13:07:57
【问题描述】:

net mvc core 2.2 和 Mssql.I 编写了一个运行良好的存储过程。结果:

但是,每当我运行我的应用程序时,所有 stockPermit 列都会返回 false。

控制器

if (!String.IsNullOrEmpty(searchString))
{
    searchString = Methods.RemoveTurkish(searchString);
    bayiVM.JoinedTable = await _adb.CariUserJoin.FromSql("EXECUTE CariListeAra {0}", searchString).ToListAsync();
}
else
{
    bayiVM.JoinedTable = await _adb.CariUserJoin.FromSql("EXECUTE CariListeGetir").ToListAsync();
}

var count = bayiVM.JoinedTable.Count;
bayiVM.JoinedTable = bayiVM.JoinedTable.Skip((productPage - 1) * PageSize).Take(PageSize).ToList();

bayiVM.PagingInfo = new PagingInfo
{
    CurrentPage = productPage,
    ItemsPerPage = PageSize,
    TotalItems = count,
    urlParam = param.ToString()
};

return View(bayiVM);

调试结果:

什么会导致这个问题。感谢您的帮助。谢谢。

存储过程1

ALTER PROCEDURE [dbo].[CariListeGetir]
AS
BEGIN

    SELECT [CARI_KOD], [CARI_ISIM], [LockoutEnd],[PlaKodu], [StockPermit] FROM YESLAS2018.dbo.TBLCASABIT
    left join b2byeslasDb.dbo.AspNetUsers on TBLCASABIT.CARI_KOD=AspNetUsers.UserName
END

存储过程2

ALTER PROCEDURE [dbo].[CariListeAra] (@ad nvarchar(15))
AS
BEGIN

    SELECT [CARI_KOD], [CARI_ISIM], [LockoutEnd],[PlaKodu], [StockPermit] FROM YESLAS2018.dbo.TBLCASABIT
    left join b2byeslasDb.dbo.AspNetUsers on TBLCASABIT.CARI_KOD=AspNetUsers.UserName
    where CARI_KOD like '%'+@ad+'%' or CARI_ISIM like '%'+@ad+'%'

END

我的视图模型

public class BayiVewModel
    {
        public List<CariUserJoin> JoinedTable { get; set; }
        public PagingInfo PagingInfo { get; set; }
    }

CariUserJoin:

public class CariUserJoin
    {
        [Key]
        public string CARI_KOD { get; set; }
        public string CARI_ISIM { get; set; }
        public DateTimeOffset? LockoutEnd { get; set; }
        public string PlaKodu { get; set; }
        public bool StockPermit { get;set}

    }

PS:我使用了 LEFT JOIN。我的意思是左表有 4500 行,右表有 30 行。

【问题讨论】:

  • 您已经有整理问题。 COLLATE DATABASE_DEFAULT 覆盖它们,同时防止优化器使用UserNameCARI_KOD 列上的任何索引。如果您检查执行计划,您将看到连接使用表扫描而不是索引查找。强制排序会掩盖问题并造成性能问题。

标签: c# entity-framework-core asp.net-core-2.2


【解决方案1】:

请使用:

public bool? StockPermit { get; set; }

set; 是必需的,以便可以实际设置属性。需要? 才能使其可以为空。

【讨论】:

    猜你喜欢
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多