首页 > 解决方案 > .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 请求,它必须存在,这样我才能比较它的电话号码。我错过了什么?

标签: c#.netlinq

解决方案


对 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; 

推荐阅读