在实体框架的Inlude中检索条件值

时间:2018-06-28 14:58:34

标签: angular entity-framework .net-core entity-framework-6 entity-framework-core

我有一个dotnet core 2.0后端和angular2+前端应用程序。

我想获取一个时间表列表中event字段等于“基线”(来自HTML的下拉菜单)的参与者列表。我在one-to-manyParticipant类之间建立了Schedule关系。

Participant.cs类:

public class Participant
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Gender { get; set; }
    public DateTime DateOfBirth { get; set; }

    // RelationShips
    public ICollection<Schedule> Schedules { get; set; }

    public Participant()
    {
        Schedules = new Collection<Schedule>();
    }
}

还有我的Schedule.cs类:

public class Schedule
{
    public int Id { get; set; }
    public DateTime? AppointmentDate { get; set; }
    public string AppointmentTime { get; set; }
    public string Event { get; set; }
    public string Location { get; set; }

    // RelationShip
    public Participant Participant { get; set; }
    public int ParticipantId { get; set; }
}

我有一个angular 2+前端,可用于获取事件等于“基线”的参与者及其时间表的列表。基线来自前端。基本上是一个硬编码的下拉菜单项。

我能够获得具有以下所有事件的所有日程表:

return await context.Participants
            .Include(x => x.Schedules)
            .ToListAsync();

但这又给了我所有时间表的人。我需要所有时间表都为event等于“基准”的人。

这是我到目前为止的想法:

return await context. Participants
            .Include(x => x.Schedules.Where(v => v.Event == "baseline"))
            .ToListAsync();

但是,这没有给我任何帮助。 怎样才能做到这一点?我不记得我在哪里读书,但有人说实体框架尚不支持此功能。我不确定这是真的。 任何帮助,将不胜感激。

编辑: 这是我遇到的错误堆栈:

  

InvalidOperationException:包含属性lambda表达式'x => {来自x.Schedules中的Schedule v,其中[v] .Event.ToLower()。Equals(__ ToLower_0)select [v]}'是无效的。该表达式应表示属性访问:“ t => t.MyProperty”。要定位在派生类型上声明的导航,请指定目标类型的显式键入的lambda参数,例如'(派生d)=> d.MyProperty'。有关包括相关数据的更多信息,请参见http://go.microsoft.com/fwlink/?LinkID=74639

1 个答案:

答案 0 :(得分:0)

如果您需要获取参与者列表,则可以从schedules开始并获得Participant这样的引用:

return context.Schedules.Where(s => s.Event == "baseline")
.Include(x => x.Participant).Select(x => x.Participant)