在我的資料庫中,有一個叫做employee的表,由Empnames和EmpId組成,同一個EmpId創建了具有用戶級別的用戶表。我想獲得一個empNames和id的串列,這些人的用戶級別等于4。
這就是我如何為一個下拉串列得到empname串列
List<M_Employee> EmpList = db.CreateEmployee.Where(x => x.Status == true).ToList()。
List<SelectListItem> EmpDropDown = EmpList.Select(x => new SelectListItem { Text = x.EmpName, Value = x.Id.ToString() }).ToList() 。
同樣的方法,我嘗試查詢用戶級別=4,并嘗試將emp表和用戶表連接起來,以獲得分配給用戶級別為4的emp名稱,但是沒有成功。
下面是我的代碼
List<int> TopEmp = db. Master_Users.ToList().Where(r => r.EmpId == int.Parse(db.CreateEmployee.Where(x=> x.Id)) ).ToList()。
你能幫我解決這個問題嗎?
uj5u.com熱心網友回復:
首先,你需要了解ToList是如何作業的。
當你呼叫ToList時,意味著Entity framework將執行在該點構建的sql陳述句,并將結果檢索到記憶體中。
您通常希望首先構建您的整個查詢,然后通過使用.Select(x => x.whatever).ToList()讓該查詢以您想要的物件格式從資料庫中獲取所有資料。否則,你將多次呼叫資料庫來獲取這里和那里的資料位,然后將它們連接起來,或在記憶體中不必要地處理它們,這比讓資料庫來處理要慢。
因此,你的第一個查詢,即獲取選擇串列項的查詢,可以這樣改寫:
你的第一個查詢,即獲取選擇串列項的查詢,可以這樣改寫。
List<SelectListItem> EmpDropDown = db.CreateEmployee
.Where(x => x.Status == true)
.Select(x => new SelectListItem { Text = x.EmpName, Value = x.Id.ToString() })
.ToList()
根據你的描述,你應該能夠像這樣重寫第2個查詢:
。 List<int> TopEmp = (from u in db.Master_Users
join e in db.CreateEmployee on u.EmpId equals e.Id
where u.Level ==4
select e.Id
).ToList()。
這使用了不同的查詢語法,但可以很容易地指定要連接的鍵,因為我不知道你的外鍵和導航屬性是如何設定的。
uj5u.com熱心網友回復:
我看不到你的dbcontext,也許它也可以使用include,但對于開始,請嘗試這樣做
List<SelectListItem> EmpDroDown = (from emp in db.CreateEmployee
join usr in db.Master_Users on emp.Id equals usr.EmpId
where emp.Status == true && usr.UserLevel== 4
select new SelectListItem { Text = em.EmpName,
Value = emp.Id.ToString() }).ToList()。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/306970.html
標籤:

