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

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 = ;
int pageSize = ;
SqlParameter[] Param =
{ new SqlParameter("@lastID", System.Data.SqlDbType.Int),
new SqlParameter("@pageSize", System.Data.SqlDbType.Int) }; if (lastID< )
{
Param[].Value = DBNull.Value;
}
else
{
Param[].Value = lastID;
} if (pageSize< )
{
Param[].Value = DBNull.Value;
}
else
{
Param[].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=;
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 = ;
public const int ERROR = -; }
public class AsResult
{
private const int STATUS_CODE = 1;
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; --声明变量 BEGIN begin transaction
begin try
BEGIN SELECT DISTINCT top (@pageSize) -- CONVERT(varchar(100), order.UpdateTime, 20) AS UpdateTime
* FROM UserInfo_test usertest
LEFT 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;
END
commit transaction
end try
---------------------------------------------------------------------------------------------------------------------------- begin catch print '执行存储异常' rollback transaction end catch END GO

.NET MVC+ EF+调用存储过程 多表联查以及VIEW列表显示的更多相关文章

  1. ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪

    ASP.NET MVC深入浅出(被替换)   一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...

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

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

  3. 转:EF调用存储过程、函数

    EF调用存储过程.函数 2014-04-02 09:12:20|  分类: ORM框架|举报|字号 订阅          一.ef4.1 codeFirst 修改表结构 增加字段等 EF code ...

  4. ASP.NET MVC + EF 利用存储过程读取大数据

    ASP.NET MVC + EF 利用存储过程读取大数据,1亿数据测试很OK 看到本文的标题,相信你会忍不住进来看看! 没错,本文要讲的就是这个重量级的东西,这个不仅仅支持单表查询,更能支持连接查询, ...

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

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

  6. MVC 5 调用存储过程参数配置方法-Procedure or function 'UP_***' expects parameter '@****', which was not supplied.

    MVC 5 调用存储过程参数配置方法-Procedure or function 'UP_***' expects parameter '@****', which was not supplied. ...

  7. .NET MVC+ EF+通用存储过程实现增删改功能以及使用事物处理

    引摘: 1.EF对事务进行了封装:无论何时执行任何涉及Create,Update或Delete的查询,都会默认创建事务.当DbContext类上的SaveChanges()方法被调用时,事务就会提交, ...

  8. EF调用存储过程、函数

    一.ef4.1 codeFirst 修改表结构 增加字段等 EF code first需要重新生成库导致数据丢失的问题 说这个问题前 首先先说下 我使用ef4.1 codefirst的目的. 是因为可 ...

  9. 关于MVC 中EF调用存储过程

    Entity Framework 4.3 中使用存储过程 分类:ASP.NET MVC 3, ASP.NET                  0                   尽管 Entit ...

随机推荐

  1. Ubuntu16.04下添加打印机FujiXerox CP116w

    今天要打印一份北马的成绩单, 不想重启机器了, 在Ubuntu下尝试添加打印机, 最后成功了, 记录一下 打印机型号是FujiXerox CP116w, 通过WIFI连接的, 在Ubuntu16.04 ...

  2. 监听Sms.Content_URI而不是Sms.Inbox.CONTENT_URI

    getContentResolver().registerContentObserver(Sms.Inbox.CONTENT_URI,         true, newMsgObserver); / ...

  3. Java容器集合类的区别用法

    Set,List,Map,Vector,ArrayList的区别 JAVA的容器---List,Map,Set Collection ├List │├LinkedList │├ArrayList │└ ...

  4. Examining Huge Pages or Transparent Huge Pages performance

    Posted by William Cohen on March 10, 2014 All modern processors use page-based mechanisms to transla ...

  5. CASE WHEN 及 SELECT CASE WHEN的用法(写了一坨烂代码发现两条sql就行了, 哎)

    转自:http://blog.sina.com.cn/s/blog_4c538f6c01012mzt.html Case具有两种格式.简单Case函数和Case搜索函数. 简单Case函数 CASE  ...

  6. hibernate关联映射注解

    转自:hibernate annotation注解方式来处理映射关系 在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说 ...

  7. 【转载】TCP数据包结构

    最近在研究TCP协议,找了点资料,感觉很经典,所以转载过来. 如果本文中图片不能观看,请链接原始地址:http://xinxiangsui2018.blog.163.com/blog/static/1 ...

  8. nginx 中文和英文资料

    http://www.nginx.cn/doc/ http://manual.51yip.com/nginx/ http://tool.oschina.net/apidocs/apidoc?api=n ...

  9. HDU Bomb Game 3622 (2-Sat)

    Bomb Game Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  10. Git 提交更新到仓库(分布式版本控制系统)

    1.Git 文件生命周期 工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪. 已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改 ...