填充列表的GetAll groupjoin

时间:2019-05-08 21:35:53

标签: c# entity-framework linq

我有一个GetAll语句,该语句可以抓住每个人并填充他们所拥有的票证的集合。我的班级缩写如下:

    public class Person
    {
      public int Id {get;set;}
      public string Name {get;set;}
      public ICollection<Ticket> Tickets {get;set;}
    }

    public class Ticket
    {
      public int Id {get;set;}
      public int PersonId {get;set;}
      public string MovieName {get;set;}
    }

我正在使用实体框架从dbcontext中使用linq生成类以填充请求。

    public async Task<List<Person>> GetPersonsAsync()
    {
        return await _context.Person.GroupJoin(_context.Ticket,
                p => p.Id,
                c => c.PersonId,
                (per, tix) => PopulatePerson(per,tix) )
            .ToListAsync();
    }

    private Person PopulatePerson(Person per, IEnumerable<Ticket> tix)
    {
        per.Tickets= tix.ToList();
        return per;
    }

这可行,但是我必须创建单独的私有PopulatePerson方法才能实现此目的。如何避免创建私有方法并在同一GroupJoin语句中填充票证列表?

1 个答案:

答案 0 :(得分:2)

您可以使用Include()并让EntityFramework为您执行Joins:

public async Task<List<Person>> GetPersonsAsync()
{
    return await _context.Person
        .Include(p => p.Tickets)
        .ToListAsync();
}