c# - .net Linq 命令不返回某些字段
问题描述
我遇到了一个问题,即使对象通过了 linq 测试,它们也会返回为 null,并且我可以看到 db 中的值,但我不确定该去哪里解决这个问题。我通常不是 ac# 开发人员,所以这对我来说是新领域。
我的桌子看起来像
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<Meeting>().OwnsMany(meeting => 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 请求,它必须存在,这样我才能比较它的电话号码。我错过了什么?
解决方案
对 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 => val.Participant)
就是这里的魔力——它告诉 EF 在您的结果中“急切地”加载和填充该实体。
在此处了解有关预加载的更多信息: https ://www.entityframeworktutorial.net/eager-loading-in-entity-framework.aspx
编辑:如 Beau 的评论中所述,要使其正常工作,您需要添加以下 using 语句:
using System.Data.Entity;
推荐阅读
- powershell - 为什么在 Orchestrator 2012 中使用变量时 Powershell 脚本会失败?
- deployment - 从应用程序访问部署在 Ropsten 网络上的智能合约
- python - 加权直方图
- java - java.io.IOException:参数不正确,getCanonicalPath时,Java
- mongoose - mongoose-paginate 模块不支持查询运算符
- delphi - 如何在 IUnknown 中实现 Delphi 字节
- json - 如何使用 GO 将 .json 文件加载到深层层次递归结构中
- java - Java ArrayList 如何在内部工作
- c# - CMYK 到 RGB 转换器不能双向工作
- python - 调用需要来自另一个文件的库的 Python 函数