从我的阅读,您的查询,仅得到1234人只有当至少有一个活动的地址。但是,它将包含与Person 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();
另一种可能更容易阅读的方法是将其分解成两部分。第一部分将提取人的细节:
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();
哪一部分您不确定?当你测试它时,你是否得到了你想要的结果? – Magnus
下面是非工作query.Query返回该包的所有PackageDetails var package = repositoryProvider.Repository.GetQuery() .Where(a => a.PackageID == 1234 && a.PackageDetails.Any(x => x包含(a => a.PackageBatch) 。包含(a => a.PackageDetails.Select(b => b.Document)) .Include(a => a.PackageSendHistories).IsExcludedFlag == false)) 。 (a => a.PackageSendHistories.Select(b => b.CompanyUser)) .SingleOrDefault(); –
Laksh
即时通讯抱歉,但我不知道正确格式化此代码的技巧 – Laksh