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

数据库数据效果展示:

代码如下:

   var userListTest = (from u in db.Users
join p in db.User_partB on u.userGUID
equals p.userGUID
join d in db.partBs on p.partID equals d.partID
select new { name = u.userName, departName = d.partName });
List<dynamic> oneList = new List<dynamic>();
foreach (var one in userListTest.ToList())
{
dynamic dyObject = new ExpandoObject();
dyObject.userName = one.name;
dyObject.departName = one.departName;
oneList.Add(dyObject);
}
ViewBag.dyObject = oneList;
return View();

前台数据展现效果:

 <table>
<tr><td>用户登录名</td><td>姓名</td><td>状态</td><td>角色</td><td>操作</td></tr>
@{foreach (var one in ViewBag.dyObject)
{
<tr>
@*<td>@one.userLoginName</td>*@
<td>@one.userName</td>
@*<td>@one.active==?"启用":"禁用"</td>*@
<td>@one.departName</td>
<td></td>
</tr>
}
}
</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]

数据库数据展示效果:

代码如下:

  var userListTest = (from u in db.Users
join p in db.User_partB on u.userGUID
equals p.userGUID into temp
from t in temp.DefaultIfEmpty()
join d in db.partBs on t.partID equals d.partID
into tempone
from user in tempone.DefaultIfEmpty()
select new { name = u.userName, departName = user.partName });
List<dynamic> oneList = new List<dynamic>();
foreach (var one in userListTest.ToList())
{
dynamic dyObject = new ExpandoObject();
dyObject.userName = one.name;
dyObject.departName = one.departName;
oneList.Add(dyObject);
}
ViewBag.dyObject = oneList;
return View();

前台数据展示效果同上

上述过程中,遇到  延迟加载后的动态数据,TOList()之后,传递到前台后,在foreach循环时,无法通过对象.属性的形式,读取出来,报“OBJECT未定义该属性”,经过查找原因发现,该动态数据为internal类型,只能同一程序集内访问,找了若干方法,不太适用,当然,如果大家有好的建议,可以一起交流讨论,究于当前场景,我选择了ExpandoObject,来动态处理,linq的查询结果。

MVC +EF+linq 多表联查的更多相关文章

  1. .NET MVC+ EF+LINQ 多表联查VIEW显示列表

    1.VIEW 页面显示代码 <link href="~/Content/bootstrap.css" rel="stylesheet" /> < ...

  2. mvc ef LINQ to Entities 不识别方法“Int32 Parse(System.String)”,因此该方法无法转换为存储表达式。

    private sys_User GetUserInfo() { sys_User model = null; var userId = Convert.ToInt32(AccountHelper.G ...

  3. MVC学习笔记(四)---使用linq多表联查(SQL)

    1.数据库原型(Students表中的ID和Scores表中的StudentID是对应的) 2.实现效果:查询出每个学生各个科目的成绩(用的是MVC学习笔记(三)—用EF向数据库中添加数据的架构) C ...

  4. 【C#】MVC+EF+LINQ 综合小项目

    第一,创建数据库 create table category(id int primary key,name nvarchar(20)) create table news(id int primar ...

  5. 探讨mvc下linq多表查询使用viewModel的问题

    最近在开发mvc3的时候发现了一个问题,就是如何在view页面显示多表查询的数据,最简单的办法就是使用viewmodel了,以下本人使用viewmodel来实现多表查询的3中方法, 先贴代码再说: 1 ...

  6. ef linq多表查询(三表)

    var ph = (from c in reef.CQICC_CLIENT join v in reef.CQICC_VISIT_CLIENT on c.CLIENT_T_ID equals v.CL ...

  7. ASP.NET MVC + EF 利用存储过程读取大数据,1亿数据测试很OK

    看到本文的标题,相信你会忍不住进来看看! 没错,本文要讲的就是这个重量级的东西,这个不仅仅支持单表查询,更能支持连接查询, 加入一个表10W数据,另一个表也是10万数据,当你用linq建立一个连接查询 ...

  8. asp.net mvc 三层加EF两表联查

    首先打开vs软件新建项目创建web中的mvc项目再右击解决方案创建类库项目分别创建DAL层和BLL层再把DAL层和BLL层的类重命名在mvc项目中的Models文件夹创建model类在DAL创建ADO ...

  9. .NET MVC+ EF+调用存储过程 多表联查以及VIEW列表显示

    直接上干活,至于网上的一大堆处理方式不予评论,做好自己的就是最好的,供大家不走弯路 1.view页面 <link href="~/Content/bootstrap.css" ...

随机推荐

  1. 151111 sqlite3数据库学习

    最近在学习数据库,想起去年做的项目里用到了sqlite3.那时候,没有任何的数据库经验,误打误撞,找到了sqlite3,然后参考网络上零碎的信息,把它嵌入到工程里,并且成功了.可惜,那时候没有好好保存 ...

  2. MFC之MessageBox用法

    一    函数原型及参数 function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer; hWnd:对话框父窗口 ...

  3. c语言小练习(蛮好玩的)

    1.求三个数的平均数,要求保留三位小数位 #include <conio.h> #include<stdio.h> int main(){ int a,b,c; float a ...

  4. hg 证书验证失败

    hg clone https://bitbucket.org/pygame/pygame 出现abort: error: _ssl.c:504: error:14090086:SSL routines ...

  5. 实战weblogic集群之安装weblogic

    一.系统及软件版本 OS版本:Red Hat Enterprise Linux Server release 6.6WebLogic Server 版本: 10.3.3.0JDK版本:1.7.0_79 ...

  6. oracle 表查询(2)

    使用逻辑操作符号 问题:查询工资高于500 或者是岗位为MANAGER 的雇员,同时还要满足他们的姓名首字母为大写的J? or job = 'MANAGER') and ename LIKE 'J%' ...

  7. 【Android Studio】No JVM installation found

    如果没有配置好JDK的环境变量,启动Android Studio的时候会报错: 请参考我整理的博客文章<JDK的下载.安装和配置>,链接:http://www.cnblogs.com/du ...

  8. MakePic.com 图片制造 打造个性签名 拒绝垃圾邮件 生成个性印章

    MakePic.com 图片制造 打造个性签名 拒绝垃圾邮件 生成个性印章 欢迎使用MakePic.com

  9. 什么是ARC

    arc就是自动引用计算.英文名Automatic Reference Counting.在一开始的IOS开发中,内存管理是需要手动的,对某个资源的引用,引用后就对其计算+1,当不再使用就-1,当计算为 ...

  10. xargs 参数

    hadoop fs -ls /source/recommend/at_access | awk -F "/" '{print $NF}' | grep -v $(date +%Y% ...