实体框架代码最有效的Linq查询

时间:2016-12-05 13:21:50

标签: c# entity-framework linq

我有以下实体(为简洁而减少);

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;

有更好的方法吗?

2 个答案:

答案 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"))这会转化为好。