2016-12-05 34 views
0

我有以下實體(爲簡潔起見縮減);實體框架代碼最高效的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關係。

隨着波蘇斯鋪設了我假設我會得到所有的UserHospital關係,然後建立

var userHospitals = context.Where<UserHospital>(x => x.User.UserName == "username").ToList(); 

,然後遍歷並建立從工作的角度列表的方式嗎?

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

所以,用戶應該參考一組醫院,醫院 - 給用戶組 – tym32167

+0

正確,然後工作有一個醫院的參考。 –

+0

這可能只是我,但這個數據庫結構似乎有點奇怪。如果你想將用戶連接到工作崗位,爲什麼你要通過醫院?我想你可能想重新考慮你的數據庫結構 – RandomStranger

回答

0

試試這個:

var res=context.Where<Job>(j=> context.Any<UserHospital>(u=>u.User.Username=="username" && u.Hospital.Id==j.Hospital.Id)).ToList(); 
0

爲什麼你有一個獨立的實體爲用戶< - >醫院多對多的關係? 如果你有這樣的每一方的收藏。

Hospital { 
    Icollection<User> Users{get;set;} 
} 

您的查詢會像 context.Jobs.Where(j=>j.Hospital.Users.Any(u=>u.username=="something"))一樣簡單,將翻譯好的。