EF 多表查询的方法

EF实体类 entity = new EF实体类();

var query = (from u in entityt.用户表 join b in entity.权限表 on u.用户权限Id equls b.Id where u.用户Id == 1 select u).FirstOrDefault();


两个表的linq 
        private DataClasses1DataContext dc;

         dc = new DataClasses1DataContext();

 var heji = (from da in dc.q1
                              join du in dc.q2
                              on da.danhao equals du.danhao
                              where da.hetong == "XXXX"

                              select new { du.color1,  da.danhao, da.riqi, du.zhongliang, du.beizhu }).Distinct();




关于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]

[csharp] view plain copy
  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();  

前台数据数据表示的方法:
 
[html] view plain copy
  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  多表联查 外链接:

[csharp] view plain copy
  1. SELECT  
  2. 1 AS [C1],  
  3. [Extent1].[userName] AS [userName],  
  4. [Extent3].[partName] AS [partName]  
  5. FROM [dbo].[User] AS [Extent1]  
  6. LEFT OUTER JOIN [dbo].[User_partB] AS [Extent2] ON [Extent1].[userGUID] = [Extent2].[userGUID]  
  7. LEFT OUTER JOIN [dbo].[partB] AS [Extent3] ON [Extent2].[partID] = [Extent3].[partID]  


[csharp] view plain copy
  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的查询结果。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值