【问题标题】:.net Linq command doesn't return certain fields.net Linq 命令不返回某些字段
【发布时间】:2020-11-26 20:27:02
【问题描述】:

我遇到了一个问题,即即使对象通过了 linq 测试,它们也会返回为 null,并且我可以看到 db 中的值,我不知道该去哪里解决这个问题。我通常不是 c# 开发人员,所以这对我来说是一个新领域。

我的桌子看起来像

Class Meeting {
...
public virtual List<MeetingParticipant> Participants { get; set; }
...
}

Class MeetingParticipant {
    public bool isOrganiser { get; set; }
    public Account Participant { get; set; }
    public ParticipatingState ParticipatingState { get; set; }
    public string responseText { get; set; }
}

我唯一的绑定是:modelBuilder.Entity&lt;Meeting&gt;().OwnsMany(meeting =&gt; meeting.Participants);

我的 linq 命令是:

var meetings = (from m in _context.Meetings
                     where m.Participants.Any(val => val.Participant.PhoneNumber == passedInPhoneNumber && val.ParticipatingState == ParticipatingState.Pending)
                     select m);

令人讨厌的是,当我深入研究返回的聚会对象时,有参与者但他们的 Account 对象为空。但是,要让聚会通过 linq 请求,它必须存在,这样我才能比较它的电话号码。 我错过了什么?

【问题讨论】:

标签: c# .net linq


【解决方案1】:

对您的 Linq 命令进行简单调整即可获得您想要的结果:

var meetings = from m in _context.Meetings.Include(val => val.Participant)
               where m.Participants.Any(val => val.Participant.PhoneNumber == passedInPhoneNumber && val.ParticipatingState == ParticipatingState.Pending)
               select m;

.Include(val =&gt; val.Participant) 是这里的魔力 - 它告诉 EF 在您的结果中“急切地”加载和填充该实体。

在此处了解有关预加载的更多信息:https://www.entityframeworktutorial.net/eager-loading-in-entity-framework.aspx

编辑:正如 Beau 的评论中提到的,要使其工作,您需要添加以下 using 语句:

using System.Data.Entity; 

【讨论】:

  • 我看到了这个,但我第一次尝试时它没有工作。尽管根据您的反馈,我挖得更深了,我是否注意到我没有从 Nuget 正确导入某些框架,并且项目中还没有“包含”功能。那和你的例子正是我所需要的!感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2012-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多