我有以下实体(为简洁而减少);
public class Job {
Hospital Hospital { get; set; }
Status Status { get; set; }
}
public class User {
string UserId { get; set; }
string UserName { get; set; }
}
public class UserHospital {
User User { get; set;}
Hospital Hospital { get; set; }
}
public class Hospital {
int HospitalId { get; set; }
}
现在,我希望获得一个特定状态的所有作业的列表,其中用户与作业具有UserHospital关系。
通过POCO的布局方式,我认为我必须获得所有UserHospital关系,然后构建
var userHospitals = context.Where<UserHospital>(x => x.User.UserName == "username").ToList();
然后循环并从Job透视图构建一个列表?
var jobs = new List<Job>();
foreach(var userHospital in userHospitals)
jobs.AddRange(context.Where<Job>(x => x.Hospital.Id == userHospital.Hospital.Id).ToList())
return jobs;
有更好的方法吗?
答案 0 :(得分:0)
试试这个:
var res=context.Where<Job>(j=> context.Any<UserHospital>(u=>u.User.Username=="username" && u.Hospital.Id==j.Hospital.Id)).ToList();
答案 1 :(得分:0)
为什么您有一个单独的实体用户&lt; - &gt;医院有多对多的关系? 如果你这样的每一方都有一个集合。
Hospital {
Icollection<User> Users{get;set;}
}
您的查询将如此简单
context.Jobs.Where(j=>j.Hospital.Users.Any(u=>u.username=="something"))
这会转化为好。