直接上干活,至于网上的一大堆处理方式不予评论,做好自己的就是最好的,供大家不走弯路

1、view页面

<link href="~/Content/bootstrap.css" rel="stylesheet" /><div class="well"><table class="table"><tr><th>用户名</th><th>地址</th><th>订单编号</th><th>城市代号</th><th>时间</th><th>订单状态</th></tr>@foreach (var item in ViewBag.dyObject){<tr><td>@item.UserName </td><td>@item.LocalAddress </td><td>@item.BargainOrderCode </td><td>@item.CityCode </td><td>@item.UpdateTime </td><td>@item.OrderStatus </td></tr>}</table></div>

2、Controller 控制器代码

 public async Task<ActionResult> UserOrder(){#region 使用存储过程实现多表联查VIEW显示int lastID = 0;int pageSize = 10;SqlParameter[] Param ={new SqlParameter("@lastID", System.Data.SqlDbType.Int),new SqlParameter("@pageSize", System.Data.SqlDbType.Int)};if (lastID< 0){Param[0].Value = DBNull.Value;}else{Param[0].Value = lastID;}if (pageSize< 0){Param[1].Value = DBNull.Value;}else{Param[1].Value = pageSize;}var data = await _DbContext.Exec_SpAsync("SP_GetUserOrderList", Param);//foreach (Dictionary<string, object> item in data)//{//    string UserName = item["UserName"].ToString();//    string LocalAddress = item["LocalAddress"].ToString();//    string BargainOrderCode = item["BargainOrderCode"].ToString();//    string CityCode = item["CityCode"].ToString();//    DateTime UpdateTime = Convert.ToDateTime(item["UpdateTime"]);//    int OrderStatus = Convert.ToInt32(item["OrderStatus"]);//}List<dynamic> userList = new List<dynamic>();foreach (Dictionary<string, object> item in data){//userList.Add(new//{//    UserName = item["UserName"].ToString(),//    LocalAddress = item["LocalAddress"].ToString(),//    BargainOrderCode = item["BargainOrderCode"].ToString(),//    CityCode = item["CityCode"].ToString(),//    UpdateTime =Convert.ToDateTime(item["UpdateTime"]),//    OrderStatus =Convert.ToInt32(item["OrderStatus"])//  });      dynamic dyObject = new ExpandoObject();dyObject.UserName = item["UserName"].ToString();dyObject.LocalAddress = item["LocalAddress"].ToString();dyObject.BargainOrderCode = item["BargainOrderCode"].ToString();dyObject.CityCode = item["CityCode"].ToString();dyObject.UpdateTime = Convert.ToDateTime(item["UpdateTime"]);dyObject.OrderStatus = Convert.ToInt32(item["OrderStatus"]);userList.Add(dyObject);}ViewBag.dyObject = userList;return View();#endregion}

3、EF中多表查询操作的存储过程通用调用方法

/// <summary>/// 存储共用/// </summary>public static class StorageCommon{/// <summary>/// 带有参数的存储过程公共方法  获取信息集合  以及返回空值处理/// </summary>/// <param name="db"></param>/// <param name="sql"></param>/// <param name="sqlParams"></param>/// <returns></returns>public async static Task<ArrayList> Exec_SpAsync(this DefaultDbContext db, string sql, SqlParameter[] sqlParams){using (var cmd = db.Database.Connection.CreateCommand()){await db.Database.Connection.OpenAsync();cmd.CommandText = sql;cmd.CommandType = System.Data.CommandType.StoredProcedure;cmd.Parameters.AddRange(sqlParams);var dr = await cmd.ExecuteReaderAsync();var columnSchema = dr.GetColumnSchema();var data = new ArrayList();while (await dr.ReadAsync()){var item = new Dictionary<string, object>();foreach (var kv in columnSchema){if (kv.ColumnOrdinal.HasValue){var itemVal = dr.GetValue(kv.ColumnOrdinal.Value);item.Add(kv.ColumnName, itemVal.GetType() != typeof(DBNull) ? itemVal : "");}}data.Add(item);}dr.Dispose();return data;}}
完善后代码:
 public async static Task<ArrayList> Exec_SpAsync(this DefaultDbContext db, string sql, SqlParameter[] sqlParams){var data = new ArrayList();DbDataReader dr=null ;try{  using (var cmd = db.Database.Connection.CreateCommand()){await db.Database.Connection.OpenAsync();cmd.CommandText = sql;cmd.CommandType = System.Data.CommandType.StoredProcedure;cmd.Parameters.AddRange(sqlParams);//var dr = await cmd.ExecuteReaderAsync();dr = await cmd.ExecuteReaderAsync();var columnSchema = dr.GetColumnSchema();while (await dr.ReadAsync()){var item = new Dictionary<string, object>();foreach (var kv in columnSchema){if (kv.ColumnOrdinal.HasValue){var itemVal = dr.GetValue(kv.ColumnOrdinal.Value);item.Add(kv.ColumnName, itemVal.GetType() != typeof(DBNull) ? itemVal : "");}}data.Add(item);}}}catch (Exception ex){_Logger.Error("查询数据" + ex.Message);//throw new Exception("查询失败." + ex.Message);
            }finally{dr.Dispose();}return data;}

       /// <summary>/// 异步执行带有参数的存储过程公共方法  增删改操作以及返回带有输出的参数/// </summary>/// <param name="db"></param>/// <param name="sql"></param>/// <param name="sqlParams"></param>/// <returns></returns>public async static Task<int> ExecuteNonQueryAsync(this DefaultDbContext db, string sql, SqlParameter[] sqlParams){int numint;using (var cmd = db.Database.Connection.CreateCommand()){await db.Database.Connection.OpenAsync();cmd.CommandText = sql;cmd.CommandType = System.Data.CommandType.StoredProcedure;cmd.Parameters.AddRange(sqlParams);numint = await cmd.ExecuteNonQueryAsync();cmd.Connection.Close();}return numint;}
完善后代码:public async static Task<int> ExecuteNonQueryAsync999(this DefaultDbContext db, string sql, SqlParameter[] sqlParams){int numint=0;using (var cmd = db.Database.Connection.CreateCommand()){try{await db.Database.Connection.OpenAsync();cmd.CommandText = sql;cmd.CommandType = System.Data.CommandType.StoredProcedure;cmd.Parameters.AddRange(sqlParams);numint = await cmd.ExecuteNonQueryAsync();cmd.Connection.Close();}catch (Exception ex){                   _Logger.Error("执行数据" + ex.Message);//throw new Exception("提交失败." + ex.Message);
                }finally{cmd.Connection.Dispose();}return numint;}}

public class RetCode{public const int SUCCESS = 0;public const int ERROR = -1;}public class AsResult{private const int STATUS_CODE = 100;private const string CONTENT_TYPE = "application/json;charset=utf-8";private readonly static Dictionary<int, string> message = new Dictionary<int, string>(){{ RetCode.SUCCESS, "success" },{ RetCode.ERROR, "" },};public static ContentResult Success(Object data = null){var content = new{RetCode = RetCode.SUCCESS,Message = message[RetCode.SUCCESS],Data = data ?? new { }};return new ContentResult{//StatusCode = STATUS_CODE,ContentType = CONTENT_TYPE,Content = JsonConvert.SerializeObject(content).ToString()};}public static ContentResult Error(int code, string moreMsg = ""){string msg = "";if (message.ContainsKey(code)){msg = message[code];}msg = String.IsNullOrEmpty(msg) ? moreMsg : msg + ", " + moreMsg;var content = new{RetCode = code,Message = msg,Data = new { }};return new ContentResult{//StatusCode = STATUS_CODE,ContentType = CONTENT_TYPE,Content = JsonConvert.SerializeObject(content).ToString()};}}}

4、存储过程

CREATE PROCEDURE [dbo].[SP_GetUserOrderList]
( @lastID int=0,  --当前页数@pageSize int=10 --每页显示记录数
   )AS--declare  @rt_code int;  --声明变量BEGINbegin transactionbegin tryBEGINSELECT  DISTINCT top (@pageSize)  -- CONVERT(varchar(100), order.UpdateTime, 20) AS UpdateTime* FROM    UserInfo_test usertestLEFT JOIN  TRA_BargainOrder_Test  ordertest ON usertest.Id=ordertest.UserID where (( @lastID > 0 AND usertest.Id < @lastID) OR @lastID=0 )  --  and CONVERT(varchar(100), MB.AddTime, 23)>CONVERT(varchar(100), @StartTime, 23) --AND CONVERT(varchar(100), MB.AddTime, 23)<CONVERT(varchar(100), @EndTime, 23) ORDER BY ordertest.UpdateTime DESC;
ENDcommit transactionend try ----------------------------------------------------------------------------------------------------------------------------begin catchprint '执行存储异常'rollback transactionend catchENDGO

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

  1. 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法

    一. 背景 上一个章节,介绍了EF调用两类SQL语句,主要是借助 ExecuteSqlCommand  和 SqlQuery 两个方法来完成,在本章节主要是复习几类存储过程的写法和对应的EF调用这几类 ...

  2. mvc调用mysql存储过程_使用.NET MVC +EF调用oracle的存储过程

    题记: 需求如题,在网上搜索了一下,没有特别贴合我需求的资料,只好自己摸索,东拼西凑了解了一点东西慢慢尝试做了出来. 难点:.NET是微软产品,主要支持Sql Server数据库,对于Oracle的数 ...

  3. EF调用存储过程实现分页

    1.通用分页代码 public static List<T> SelectPageList<T>(string sqlstr, int pageIndex, int pages ...

  4. ASP.NET MVC: EF 没有创建数据库表

    设定连接字符串时,Name属性的值,应该等于创建的EF数据库类类名 比如: using System; using System.Collections.Generic; using System.L ...

  5. .NET 三层架构+MVC+EF实现对数据库表的增删改查

    数据库: 表 项目层级: Model类库下: Student.cs类源码: namespace Model {public

  6. html.action 访问分部视图,MVC+EF 随笔小计——分部视图(Partial View)及Html.Partial和Html.Action差异...

    Partial View指可以应用于View中以作为其中一部分的View的片段(类似于之前的user control), 可以像类一样,编写一次, 然后在其他View中被反复使用. 一般放在" ...

  7. 存储过程分页——单表分页,任意表分页,EF调用分页存储过程

    一.单表分页 if exists(select * from sysobjects where name='proc_movies')drop proc proc_movies go create p ...

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

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

  9. MVC +EF+linq 多表联查

    关于linq的多表联查效果的实现: 后台多表查询  内连接: SELECT [Extent2].[partID] AS [partID], [Extent1].[userName] AS [userN ...

最新文章

  1. 你不可不知的家庭装修禁忌
  2. android app 历史版本,怎么找到App的所有历史版本,以及每次改版的变更点呢?
  3. webpack 热替换和热重载
  4. mysql学习笔记之mysqlparameter(摘)
  5. LeetCode 1366. 通过投票对团队排名(自定义排序)
  6. adb 命令的个人记录
  7. 年薪不到 25.2 万退学费,廖雪峰的“大数据高级开发”课程招生
  8. python里如何计算大文件的md5
  9. Python学习笔记:演示多根继承
  10. Rust 2018临近:设法从Rust 2015过渡
  11. 关于初级安全工程师的培训思路或大纲整理
  12. 井字棋游戏 Matlab
  13. 云上游戏数据分析实践
  14. 不为环境所动就能成功——职场人士寓言(3)
  15. 星际迷航-发现号-第三季最后一集
  16. 软件工程专业毕业计算机水平,软件工程专业很“霸气”,不管985还是“二本”,毕业几乎都高薪就业...
  17. python怎么变大字体_pycharm字体放大缩小设置
  18. 怎么给图片加滤镜?我来教你图片滤镜怎么调才好看
  19. 三星手机的计算机功能在哪里,三星手机隐藏特殊功能 三星手机使用技巧大全...
  20. linux firawll防火墙设置白名单/指定ip访问指定端口

热门文章

  1. Vue版todolist案例
  2. JS-复习回调构造函数对象
  3. ECharts 常用图表一看即会「散点图」「饼图」「地图」「雷达图」「仪表盘」
  4. ios键盘弹回时顶上去得页面不会回来
  5. P1638 逛画展(直尺法)
  6. 通过Python实现简单的计算器
  7. 关于git远程版本库的一些问题之解决
  8. Jmeter(二)关联
  9. 【转】Pro Android学习笔记(一):Android 平台 2013.6.4
  10. mysql控制台操作