我有一个数据库表,我们称它为“ People”,并有一个与之关联的实体,还有一个视图模型类Person,其中包含来自另一个表的对象列表,例如“ Jobs”。每个工作都有一定的时间长度。使用LINQ,我想使一个包含IQueryable的IQueryable。

数据库中有很多人。我想拉那些已经工作了六个月以上的人。

我所拥有的是:

public IQueryable<Person> GetPeople() =>
    Repo<Person>.Get().Select(p => new Person
    {
        Name = p.Name,
        Jobs = GetJobs(p.Name)
    }).Where(h => h.Jobs.Count() > 0);

public IQueryable<Job> GetJobs(string name) =>
    Repo<Job>.Get().Where(j => j.name == name && j.time > 6);


问题在于这牵扯到每个人,然后为每个人查询工作,这效率很低。是否有一个很好的方法先拉工作,然后创建人员列表,每个人都有自己的合格工作列表?

最佳答案

通常,如果使用实体框架,我会说您会这样做:

var results=db.People.Where(p=>p.Jobs.Any(j=>j.time>6));


假定您有一个Person类,该类由表People表示,并且Person类具有一个称为Jobs的导航属性,该属性引用了Jobs表。

关于c# - 使用linq实例化包含其他对象列表的对象,其中查询条件位于内部列表上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32894954/

10-13 08:09