2016-05-05 138 views
2

我有醫院和醫療專業。以這種方式,通過醫院的ID通過查詢結果訪問塊

我的醫學專科頁面返回的數據:

本地主機/ MedicalSpecialities/1,1是HospitalID。如果我手動更改鏈接,我可以訪問任何醫院信息。

我有這樣相關的醫院用戶: enter image description here

我需要查詢醫院ID的用戶有關聯,並檢查當前HospitalID是在名單上。

這回該用戶已連接所有的醫院:

 var userID = User.Identity.GetUserId(); 
     var result = db.Hospitals.Include("UserHospitals") 
           .Where(x => x.UserHospitals 
           .Any(u => u.Id == userID)) 
           .ToList(); 
+0

連接和關聯有什麼區別? – Shyju

+0

沒有區別 –

+0

您的linq查詢應該爲您提供與特定用戶ID相關聯的醫院。你錯過了什麼? – Shyju

回答

2

基本上可以更新您的Any()方法的條件包括對HospitalId列的檢查。

var hospitalId =5; 
var result = db.Hospitals 
       .Include(y=>y.UserHospitals) 
       .Where(x => x.UserHospitals.Any(u => u.Id == userID 
               && u.HospitalID==hospitalId)) 
       .ToList(); 

如果您希望只此條件的獨院,你也可以考慮使用FirstOrDefault()方法。

var singleHospital = db.Hospitals 
         .Include(y=>y.UserHospitals) 
         .Where(x => x.UserHospitals.Any(u => u.Id == userID 
                 && u.HospitalID==hospitalId)) 
         .FirstOrDefault(); 
if(singleHospital!=null) 
{ 
    //Safely use it. 
} 
+0

Sry但在「任何」我得到「操作符&&不能應用於操作數類型BOOL或INT」 –

+0

對不起現在修正兩個'==') – Shyju

+0

無論如何,我的事情,它不能解決我的問題。我會告訴你我的控制器[這裏。](https://i.gyazo.com/617d528b7f8f09a8610d9e878c57425f.png)我只想做一個IF來檢查用戶和醫院是否連接,如果是false,那麼他會得到一個錯誤頁面,如果爲true,則執行主查詢並返回所有數據 –