实体框架:我可以在一个请求中进行两个单独的查询吗?

时间:2014-06-19 02:44:07

标签: c# linq entity-framework asp.net-mvc-4

是否可以在一个请求中对不同的表进行两次查询?

例如,如果我有这个DBContext:

public DbSet<Farm> Farms { get; set; }
public DbSet<Farmer> Farmers { get; set; }
public DbSet<Llama> Llamas { get; set; }

这些课程:

public class Farm
{
    [Key]
    public Guid ID { get; set; }

    public virtual ICollection<Farmer> Farmers { get; set; }
    public virtual ICollection<Farmer> Llamas { get; set; }
}

public class Farmer
{
    [Key]
    public Guid ID { get; set; }
    public Guid FarmID { get; set; }

    public virtual Farm Farm { get; set; }
}

public class Llama
{
    [Key]
    public Guid ID { get; set; }
    public Guid FarmID { get; set; }

    public virtual Farm Farm { get; set; }
}

是否可以在一个查询中进行这两个查询?

public IEnumerable<object> GetInhabitants(Guid farmID)
{
    DBContext db = new DBContext();

    IEnumerable<Farmer> farmers = db.Farmers.Where(x => x.FarmID == farmID);
    IEnumerable<Llama> llamas = db.Llamas.Where(x => x.FarmID == farmID);

    return [this would be easier if I could make one query]
}

1 个答案:

答案 0 :(得分:-1)

鉴于您的特定设置,我相信您可以做到

return db.Farmers.Where(x => x.FarmID == farmID)
       .Union(db.Llama.Where(x => x.FarmID == farmID));

(注意:我正在写下这个,所以语法可能有点偏。)

编辑添加: 您可能希望查找延迟执行。如果您正在使用IQueryable对象,则可以在代码中生成任意数量的Entity Framework请求,但在触发执行之前它通常不会执行它们(通常通过调用.ToList())。 p>