Linq 如何在父表和子表上设置where条件

Linq 如何在父表和子表上设置where条件,linq,linq-to-sql,linq-to-entities,Linq,Linq To Sql,Linq To Entities,在下面的查询中,我想按其id选择此人,我只想包括活动地址。如何编写该查询?我不确定我写的是不是正确的 请注意,GetQuery()返回IQueryable var person = repositoryProvider.Repository.GetQuery<Person>() .Where(a => a.PersonID == 1234 && a.Addresses.Any(x=>x.IsActive)) .Include(a =>

在下面的查询中,我想按其id选择此人,我只想包括活动地址。如何编写该查询?我不确定我写的是不是正确的

请注意,
GetQuery()
返回
IQueryable

var person = repositoryProvider.Repository.GetQuery<Person>()
    .Where(a => a.PersonID == 1234 && a.Addresses.Any(x=>x.IsActive))
    .Include(a => a.Addresses)
    .Include(a => a.Employer)                   
    .SingleOrDefault();
var person=repositoryProvider.Repository.GetQuery()
其中(a=>a.PersonID==1234&&a.Addresses.Any(x=>x.IsActive))
.包括(a=>a.地址)
.包括(a=>a.雇主)
.SingleOrDefault();

根据我的阅读,您的查询只有在至少有一个活动地址的情况下才能获取person 1234。但是,它将包括与1234人相关的所有地址。例如,如果person 1234有一个活动地址和五个非活动地址,您将获得person 1234的详细信息,以及其六个总地址,而不仅仅是活动地址

出于您的目的,我认为子查询就可以了

var person = repositoryProvider.Repository.GetQuery<Person>()
             .Where (a => a.PersonID ==1234)
             .Include(a => a.Address)
             .Include(a => a.Employer)
             .Select (p => new Person { Id = p.Id,  // <-- set the person's properties that you need using the person details that you have extracted.
                      FirstName = p.FirstName,
                      Employer = p.Employer.ToList()
                      Addresses = p.Addresses.Where(a => a.IsActive == true) // <-- transform the resulting entity such that it will only return active addresses
                      }).FirstOrDefault();

你不确定哪一部分?当您测试它时,您得到了想要的结果吗?下面是非工作查询。查询返回该包的所有PackageDetails var Package=repositoryProvider.Repository.GetQuery()。其中(a=>a.PackageID==1234&&a.PackageDetails.Any(x=>x.IsExcludedFlag==false))。包括(a=>a.PackageBatch).包括(a=>a.PackageDetails.Select(b=>b.Document)).包括(a=>a.PackageSendHistories).包括(a=>a.PackageSendHistories.Select(b=>b.CompanyUser)).SingleOrDefault();很抱歉,我不知道正确格式化此代码的诀窍
var person = repositoryProvider.Repository.GetQuery<Person>()
             .Where (a => a.PersonID ==1234)
             .Include(a => a.Addresses)
             .Include(a => a.Employer)
             .Select (p => p);
person.Addresses = person.Addresses.Where (a => a.IsActive == true).ToList();