MVC +EF+linq 多表聯查


關於linq的多表聯查效果的實現:

后台多表查詢  內連接:

SELECT
[Extent2].[partID] AS [partID],
[Extent1].[userName] AS [userName],
[Extent3].[partName] AS [partName]
FROM [dbo].[User] AS [Extent1]
INNER JOIN [dbo].[User_partB] AS [Extent2] ON [Extent1].[userGUID] = [Extent2].[userGUID]
INNER JOIN [dbo].[partB] AS [Extent3] ON [Extent2].[partID] = [Extent3].[partID]

數據庫數據效果展示:

代碼如下:

 

 1   var userListTest = (from u in db.Users
 2                                 join p in db.User_partB on u.userGUID
 3               equals p.userGUID
 4                                 join d in db.partBs on p.partID equals d.partID
 5                                 select new { name = u.userName, departName = d.partName });
 6             List<dynamic> oneList = new List<dynamic>();
 7             foreach (var one in userListTest.ToList())
 8             {
 9                 dynamic dyObject = new ExpandoObject();
10                 dyObject.userName = one.name;
11                 dyObject.departName = one.departName;
12                 oneList.Add(dyObject);
13             }
14             ViewBag.dyObject = oneList;
15             return View();

前台數據展現效果:

 1 <table>
 2     <tr><td>用戶登錄名</td><td>姓名</td><td>狀態</td><td>角色</td><td>操作</td></tr>
 3     @{foreach (var one in ViewBag.dyObject)
 4     {
 5         <tr>
 6             @*<td>@one.userLoginName</td>*@
 7             <td>@one.userName</td>
 8             @*<td>@one.active==1?"啟用":"禁用"</td>*@
 9             <td>@one.departName</td>
10             <td></td>
11         </tr>
12     }
13     }
14 </table>

linq  多表聯查 外鏈接:

SELECT
1 AS [C1],
[Extent1].[userName] AS [userName],
[Extent3].[partName] AS [partName]
FROM [dbo].[User] AS [Extent1]
LEFT OUTER JOIN [dbo].[User_partB] AS [Extent2] ON [Extent1].[userGUID] = [Extent2].[userGUID]
LEFT OUTER JOIN [dbo].[partB] AS [Extent3] ON [Extent2].[partID] = [Extent3].[partID]

數據庫數據展示效果:

代碼如下:

 1  var userListTest = (from u in db.Users
 2                                 join p in db.User_partB on u.userGUID
 3               equals p.userGUID into temp
 4                                 from t in temp.DefaultIfEmpty()
 5                                 join d in db.partBs on t.partID equals d.partID 
 6                                 into tempone
 7                                 from user in tempone.DefaultIfEmpty()
 8                                 select new { name = u.userName, departName = user.partName });
 9             List<dynamic> oneList = new List<dynamic>();
10             foreach (var one in userListTest.ToList())
11             {
12                 dynamic dyObject = new ExpandoObject();
13                 dyObject.userName = one.name;
14                 dyObject.departName = one.departName;
15                 oneList.Add(dyObject);
16             }
17             ViewBag.dyObject = oneList;
18             return View();

前台數據展示效果同上

上述過程中,遇到  延遲加載后的動態數據,TOList()之后,傳遞到前台后,在foreach循環時,無法通過對象.屬性的形式,讀取出來,報“OBJECT未定義該屬性”,經過查找原因發現,該動態數據為internal類型,只能同一程序集內訪問,找了若干方法,不太適用,當然,如果大家有好的建議,可以一起交流討論,究於當前場景,我選擇了ExpandoObject,來動態處理,linq的查詢結果。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM