完成前面的操作以后,开始建立数据访问层的类文件,这时,先在DAL项目下添加一个类文件,取名为DALEmployees.cs,其代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Auto.DAL
{
public class DALEmployees
{
/// <summary>
/// VS自动生成的数据模型
/// </summary>
NorthwindDataContext db = new NorthwindDataContext();
/// <summary>
/// 根据条件获取数据列表方法
/// </summary>
/// <param name="strCity">城市地址</param>
/// <returns>获取的Employees数据列表</returns>
public IQueryable<Employees> GetList(string strCity)
{
//根据城市地质,通过LINQ返回数据
return from p in db.Employees
where p.City == strCity
select p;
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Auto.DAL
{
public class DALEmployees
{
/// <summary>
/// VS自动生成的数据模型
/// </summary>
NorthwindDataContext db = new NorthwindDataContext();
/// <summary>
/// 根据条件获取数据列表方法
/// </summary>
/// <param name="strCity">城市地址</param>
/// <returns>获取的Employees数据列表</returns>
public IQueryable<Employees> GetList(string strCity)
{
//根据城市地质,通过LINQ返回数据
return from p in db.Employees
where p.City == strCity
select p;
}
}
}
这个数据访问层中只建立了一个用来根据城市地址获取Employee数据的方法,它内部执行一段LINQ,返回一个IQueryable型的结果,由于LINQ后期编译的特性,这个结果只有在程序运行后才会返回数据集。
接着,建立业务逻辑层,在BLL项目中,添加一个类文件,取名为BLLEmployees.cs,其代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Auto.DAL;
namespace Auto.BLL
{
public class BLLEmployees
{
/// <summary>
/// 通过城市名获得Employee数据
/// </summary>
/// <param name="strCity">城市名</param>
/// <returns>数据结果</returns>
public IQueryable<Employees> GetList(string strCity)
{
DALEmployees de=new DALEmployees();
//调用数据访问层的方法
return de.GetList(strCity);
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Auto.DAL;
namespace Auto.BLL
{
public class BLLEmployees
{
/// <summary>
/// 通过城市名获得Employee数据
/// </summary>
/// <param name="strCity">城市名</param>
/// <returns>数据结果</returns>
public IQueryable<Employees> GetList(string strCity)
{
DALEmployees de=new DALEmployees();
//调用数据访问层的方法
return de.GetList(strCity);
}
}
}
这段代码完成了业务逻辑层的定义,建立了一个和数据访问层的同名方法GetList,用来传送城市名称参数。最后,在WEB Application项目中,添加对BLL层的应用,并在Default.aspx页面中添加一个GridView控件用来显示数据,Default.aspx.cs的代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Auto.BLL;
namespace WebApplication2
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GetList("London");
}
}
/// <summary>
/// 根据城市获取数据
/// </summary>
/// <param name="strCity">城市名称</param>
private void GetList(string strCity)
{
//执行业务逻辑层的方法
BLLEmployees bl = new BLLEmployees();
//绑定到GridView1控件
GridView1.DataSource = bl.GetList(strCity);
GridView1.DataBind();
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Auto.BLL;
namespace WebApplication2
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GetList("London");
}
}
/// <summary>
/// 根据城市获取数据
/// </summary>
/// <param name="strCity">城市名称</param>
private void GetList(string strCity)
{
//执行业务逻辑层的方法
BLLEmployees bl = new BLLEmployees();
//绑定到GridView1控件
GridView1.DataSource = bl.GetList(strCity);
GridView1.DataBind();
}
}
}
完成后,执行程序,便可得到相关数据,整个程序的结构如下:
总结:实际上,这个基于LINQ的架构是将数据模型层和数据访问层整合到一个项目中,它的特点就是开发快速,效率高,可以很方便的帮你完成数据模型的搭建,并且也便于后期修改,当数据表发生变动时,只选要修改dbml文件就可以了。但这个架构里有些地方还是不大完善,例如城市数据作为参数,应该也是以数据模型的方式来传送,但这里仅是按字符串传递,这样不利于数据的封装和安全。因此还需要在此处改进。总体来说,比以往的三层架构结构更加清晰了,如果再结合ASP.NET MVC架构来使用,就更加完美了。