关于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. George and Cards

    Codeforces Round #227 (Div. 2) E:http://codeforces.com/contest/387/problem/E 题意:给你一个n个数的序列,然后给你一个标准序 ...

  2. Oracle 多版本控制

    SESSION 1: SQL> create table t 2 as 3 select * from all_users; Table created. SQL> variable x ...

  3. JavaScript 函数和对象

    在javascirpt 世界中,所有的函数都是对象,并且还可以被用来创建对象. function make_person(firstname, lastname, age) { person = {} ...

  4. BZOJ 1048 [HAOI2007]分割矩阵

    1048: [HAOI2007]分割矩阵 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 623  Solved: 449[Submit][Status ...

  5. 线性代数(矩阵乘法):NOI 2007 生成树计数

    这道题就是深搜矩阵,再快速幂. #include <iostream> #include <cstring> #include <cstdio> #include ...

  6. Dinic 模板

    #include <iostream> #include <cstring> #include <cstdio> #include <queue> us ...

  7. Delphi生成GUID

    Delphi生成GUID Uses ComObj; Var aGUID: string; aGUID := GetClassId; // 取得GUID

  8. HDOJ 2021 发工资咯:)(利用了一种取余的思想)

    Problem Description 作为杭电的老师,最盼望的日子就是每月的8号了,因为这一天是发工资的日子,养家糊口就靠它了,呵呵 但是对于学校财务处的工作人员来说,这一天则是很忙碌的一天,财务处 ...

  9. Sublime Text 3安装与使用 Package Control 插件安装

    原文地址:http://www.cnblogs.com/zhcncn/p/4113589.html 本文是Sublime Text 全程指引 by Lucida (http://www.cnblogs ...

  10. Eclipse 在线汉化

    1. 打开Eclipse  , 进入菜单中 Help-->Install new Software.. 2. 到Eclipse 官网找到语言包地址,http://www.eclipse.org/ ...