将DataTable使用AsEnumerable()转换为List<T>实现MVC5查询功能

#NET编程#

01第一节:查询功能原理

对于ASP.NET MVC 5列表的查询功能,我们完全可以使用Linq进行查询,当然也可以直接使用SQL语句进行查询。

在使用LINQ进行查询时,需要将DataTable对象转换为可以枚举的类型。

因为DataTable本身就是底层的操作对象,一般是将从SQL Server数据库拿到的数据放在DataTable或DataSet对象,它们是在内存中存放的。

ASP.NET MVC 5查询操作

对于ASP.NET MVC 5的视图,如果是分层开发,这是不允许在视图中使用DataTable或DataSet对象的,因此,就需要在DAL层得到数据后传到BLL层,在BLL层将DataTable或DataSet对象中的数据转换为List<T>对象再传递给视图使用。

对于原生的HTML中的form标记,默认是GET提交方式,而在ASP.NET MVC 5中,使用@Html.BeginForm()辅助方法生成的form标记,默认是POST提交方式。

02第二节:视图界面设计

对于软件系统的查询功能,使用最多的就是放一个文本框,可以对多个字段的值进行模糊查询。像百度的搜索框,就只有一个文本框,但有些后台系统,查询条件比较,有文本框、下拉菜单和时间选择等。

这里我们只讲最简单的一个文本框的查询操作,当在文本框中输入查询关键字时,会在数据库中进行包含查询,查询到结果后再返回给视图,这样用户在视图中就能看到查询后的结果了。

<div style="padding:10px;">@using (Html.BeginForm()){@Html.TextBox("query")<input type="submit" value="查询" />}</div>

在此代码中,将文本框中的关键字提交到当前控制器和操作方法中,这里使用的是@Html.BeginForm()辅助方法来提交表单。

由于要执行查询功能,所以涉及到提交,要使用submit类型的按钮来提交查询关键字到服务器上。

03第三节:查询代码

之前我们显示数据时,List()方法是没有参数的,现在再编写一个List()的重载方法,并使用[HttpPost]提交即可:

[HttpPost]public ActionResult List(string query){DataTable dt = sBLL.GetAllDataInfo();var xDT = from d in dt.AsEnumerable()where d.Field<string>("Name").Contains(query)select new StudentViewModel{Name = d.Field<string>("Name"),Email = d.Field<string>("Email")};return View(xDT);}

在此代码中,使用了方法将DataTable对象中的表数据转换为List<T>对象,并且可以选择哪些字段的值可以存在列表对象中。

这是使用Linq进行查询,将根据查询关键字查到的结果全部放在List<T>中,这样在视图中,直接在表格中显示的就是我们查询到的最终结果。