我有一个数据库表,我们称它为“ 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/