代码之家  ›  专栏  ›  技术社区  ›  Peter Kellner

在Entity Framework Core 5中,如何嵌套查询并仍然具有IQueryable

  •  0
  • Peter Kellner  · 技术社区  · 5 年前

    我有两个实体,我想合并并只返回一个 IQueryable 从中。举个例子,想象一下我有一个会议应用 Speakers Sessions Events .

    如果我把所有三个都加入,然后我要求所有与一个演讲者相关的会议(在所有事件中),我会得到每个事件的返回记录,而实际上我只想要一个演讲者记录,其中包含所有会议的细节。

    也就是说,我的EF查询如下所示:

    var q1 = from speaker in db.speakers
             join sessions in db.sessions on speaker.Id equals session.speakerId
             join event in db.sessions on session.EventId equals event.Id
             where speaker.Id = 101
    

    我想要的是一种先创建说话人查询的能力

    var q2 = from speaker in db.speakers
             where speaker.Id = 101
    

    然后,创建另一个查询,为我提供多年来所有演讲者的会话

    var q3 = join sessions in db.sessions on speaker.Id equals session.speakerId
             join event in db.sessions on session.EventId equals event.Id
             where session.AttendeeId = 101
    

    最后,我真的在寻找一个查询,qFinal将它们结合起来。

    var qFinal = q2 that has a collection of sessions, or basically, what q3 returns.
    

    记住 Attendee 实体包含会话的集合。

    我意识到我上面的伪代码并没有真正编译,但我真正的问题要复杂得多,我认为用更简单的术语来解释更容易。

    0 回复  |  直到 5 年前
        1
  •  2
  •   Svyatoslav Danyliv    5 年前

    我想这是你需要的 Include 用法

    var query = db.speakers
      .Include(s => s.sessions.Where(x => x.AttendeeId = 101))
      .Where(s => s.Id = 101);