You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF中使用DefaultIfEmpty后Where条件是否需添加OR的技术咨询

解决方案

你需要在Where语句中添加OR条件,否则左外连接(DefaultIfEmpty)的作用会被抵消,无法获取客户未作答的投票选项。

问题分析

原代码的Where条件(mppss.MeetingPollingPartsId == MeetingPollingPartsId && mppvs.CustomerId == CustomerId)会过滤掉所有mppvs为NULL的行(也就是客户未作答的情况)——因为当mppvs为NULL时,mppvs.CustomerId == CustomerId的结果是false,整个条件不成立,导致未作答的选项被排除。

修正后的EF代码

var MeetingPollingParticipantsAnswers = (from mppss in db.MeetingPollingParts
                                         join mppv in db.MeetingPollingPartsValues on mppss.MeetingPollingPartsId equals mppv.MeetingPollingPartsId
                                         join mppvs in db.MeetingPollingResponseValues on mppv.MeetingPollingPartsValuesId equals mppvs.MeetingPollingPartsValuesId into actualAnswers
                                         from mppvs in actualAnswers.DefaultIfEmpty()
                                         where mppss.MeetingPollingPartsId == MeetingPollingPartsId 
                                               && (mppvs == null || mppvs.CustomerId == CustomerId)
                                         select new Model.MeetingPollingParticipantsAnswers
                                         {
                                             Question = mppv.QuestionValue,
                                             Selected = mppvs != null && mppvs.MeetingPollingPartsValuesId == mppv.MeetingPollingPartsValuesId,
                                             MeetingPollingPartsValuesId = mppv.MeetingPollingPartsValuesId
                                         }).ToList();

关键修改点说明

  • Where条件调整:添加mppvs == null的判断,允许左外连接后mppvs为NULL的行(即客户未作答的选项)保留下来,同时确保MeetingPollingPartsId匹配目标投票项。
  • Selected字段修正:原代码中aa变量未定义且逻辑有误,修正为判断mppvs不为空且对应的选项ID匹配,未作答时Selected自动为false。
  • MeetingPollingPartsValuesId字段修正:替换原代码中未定义的aa变量,改为使用mppv的对应字段,确保获取投票选项本身的ID。

逻辑验证

  • 客户已作答:mppvs存在,mppvs.CustomerId == CustomerId条件成立,返回该客户选择的选项,Selected为true。
  • 客户未作答:mppvs为NULL,mppvs == null条件成立,返回该投票的所有选项,Selected为false,符合需求。

内容的提问来源于stack exchange,提问作者Jefferson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 00:00:57