【问题标题】:Condition == null and != null returns the same row条件 == null 和 != null 返回同一行
【发布时间】:2020-07-20 18:04:34
【问题描述】:

我进行了一些连接以访问字段IsVacancyActive

当我写条件s.IsVacancyActive == null 时,我得到了几行,其中有一个不应该存在。

如果我写s.IsVacancyActive != null,那么我会得到另一个行集合,包括我在之前条件下拥有的那一行。怎么会这样?它如何同时具有nullnot null 两个值?

附:我使用into 进行左连接

var data = (from c in db.Table1
            join cm in db.Table2 on c.CandidateId equals cm.CandidateId into var1 from cm in var1.DefaultIfEmpty()
            join lp in db.Table3 on c.KotelPositionId equals lp.PositionId into var2 from lp in var2.DefaultIfEmpty()
            join pg in db.Table4 on lp.PositionId equals pg.PositionId into var3 from pg in var3.DefaultIfEmpty()
            join lpt in db.Table5 on pg.LinkPositionGradeId equals lpt.LinkPositionGradeId into var4 from lpt in var4.DefaultIfEmpty()
            join s in db.Table6 on lpt.LinkPositionTeamId equals s.LinkPositionTeamId into var5 from s in var5.DefaultIfEmpty()
            join cv in db.Table7 on s.StaffId equals cv.VacancyId into var6 from cv in var6.DefaultIfEmpty()
            join cvac in db.Table8 on c.CandidateId equals cvac.CandidateId into var7 from cvac in var7.DefaultIfEmpty()
            where s.IsVacancyActive == null// Error
            select new
            {
                c
            }).Distinct()
            .ToList();

【问题讨论】:

  • 提示:IS NULLIS NOT NULL.
  • 最好使用s.IsVacancyActive is null。但这取决于 SQL Server 中激活的兼容性向量。
  • @GordonLinoff 这是 Linq 查询语言,没有 is nullis not null
  • 与你的问题无关,因为你没有发布任何有用的东西来追踪你的问题,你绝对不需要做new { c },如果你想要的话,只需返回c。我希望不是这样,因为返回那个怪物的结果会阻塞你的网络并杀死垃圾收集器。
  • is null 给我一个错误“表达式树可能不包含 'is' 模式匹配运算符。”

标签: c# sql .net linq


【解决方案1】:

如果问题中的 LINQ 查询最终解析为 SQL 数据库事务,那么 where 子句:

where s.IsVacancyActive == null// Error

...可能会被 LINQ 解析为 SQL 中的 null 比较,即 X = NULL 或 X != NULL,这在 SQL 中都是 false。

试试:

where s.IsVacancyActive.HasValue

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多