將不確定變成確定~LINQ查詢兩種寫法,性能沒有影響,優化查詢應該是“按需查詢”
如果在linq中希望進行一對多的復合查詢時,請直接在查詢中使用join into,或者使用let 關鍵字,當然在建立實體時動態賦值對于查詢的性能也是沒有影響的,兩次查詢結果完成相同
一 :在實體中賦值
var linq = from data in this.GetModel() join data2 in iWebDepartmentsRepository.GetModel() on data.DepartmentID equals data2.DepartmentID select new WebManageUsers_Ext { ManageUserID = data.ManageUserID, LoginName = data.LoginName, WebDepartments_Extend = data2, WebManageUser_WebManageRoles_Extend = new WebManageUser_WebManageRolesRepository().GetModel().Where(i => i.ManageUserID == data.ManageUserID), AvatarUrl = data.AvatarUrl, };
在語句中使用let關鍵字
var linq = from data in this.GetModel() join data2 in iWebDepartmentsRepository.GetModel() on data.DepartmentID equals data2.DepartmentID let list = new WebManageUser_WebManageRolesRepository().GetModel().Where(i => i.ManageUserID == data.ManageUserID) select new WebManageUsers_Ext { ManageUserID = data.ManageUserID, LoginName = data.LoginName, WebDepartments_Extend = data2, WebManageUser_WebManageRoles_Extend = list, AvatarUrl = data.AvatarUrl, };
兩次的SQL分析器的結果是完成一樣的![]()
![]()
當然,對于LINQ的查詢,最好的方式就是“按需”查詢,也就是說,用到哪些字段就select哪些字段,代碼可能是這樣:
var linq = from data in db.WebManageUsers join data2 in db.WebDepartments on data.DepartmentID equals data2.DepartmentID let list1 = db.WebManageUser_WebManageRoles.Where(i => i.ManageUserID == data.ManageUserID).Select(j => new WebManageUser_WebManageRoles_Ext { ManageRoleID = j.ManageRoleID, ManageUserID = j.ManageUserID }) select new WebManageUsers_Ext { ManageUserID = data.ManageUserID, LoginName = data.LoginName, RealName = data.RealName, WebDepartments_Extend = new WebDepartments_Ext { DepartmentName = data2.DepartmentName }, WebManageUser_WebManageRoles_Extend = list1, };
回到目錄


浙公網安備 33010602011771號