LINQ(Language Integrated Query)是微软在.NET Framework3.5中引入的一项新技术,它为C#3.0提供了一种新的查询数据库和对象的语法。LINQ可以用于映射XML、ADO.NET数据集、SQL以及.NET集合中的数据。
在设计三层或多层架构的项目时,需要创建业务类和对象。以下是一个简单的类定义,它映射到用户表:
public class UserBaseEntity
{
public int ID { get; set; }
public string Fullname { get; set; }
public string Fathername { get; set; }
}
在SQL中创建一个表:
CREATE TABLE Users (
ID nvarchar(50) PRIMARY KEY NOT NULL,
Fathername nvarchar(50) NOT NULL
)
在LINQ中,需要使用映射属性来定义实体类。以下是如何在类中映射属性的示例:
using System.Data.Linq.Mapping;
[Table(Name = "Users")]
public class Users
{
[Column(DbType = "nvarchar(32) not null", IsPrimaryKey = true)]
public string ID;
[Column(DbType = "nvarchar(50) not null")]
public string FullName;
[Column(DbType = "nvarchar(50) not null")]
public string FatherName;
}
LINQ查询有三个部分:获取数据源、创建查询和执行查询。
在三层架构中,创建数据访问层、业务访问层和表示层。
创建项目名为Users,在Visual Studio 2008中选择3.5框架。
在业务访问层(业务层)中,创建一个名为UsersBase.cs的用户基类:
using System;
using System.Collections.Generic;
using System.Text;
namespace AamirHasan.BLL
{
public class UsersBase
{
private Int64 _id;
private string _fullName;
public String FullName
{
get { return _fullName; }
set { _fullName = value; }
}
public Int64 ID
{
get { return _id; }
set { _id = value; }
}
}
}
创建一个Users类,并创建一个名为getUsers()的函数,该函数从用户表中获取FullName并返回用户列表:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AamirHasan.DAL;
namespace AamirHasan.BLL
{
public class Users : UsersBase
{
public List getUsers()
{
DBConnection d = new DBConnection();
using (var db = d.GetDBContext())
{
List patientRecord = (from x in db.users select new Users { FullName = x.username }).ToList();
return patientRecord;
}
}
}
}
在表示层中,使用了Web表单,因此创建一个Web页面并编写一个Web方法以获取所有用户名称列表:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using AamirHasan.BLL;
// 添加业务层引用
using System.Web.Security;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
[WebMethod]
public static List GetUsersList()
{
Users a = new Users();
return a.getUsers();
}
}
注意:函数应该是静态的,以便从jQuery向服务器端发送请求。
在HTML页面中,在head标签下包含jQuery引用。
添加jQuery请求函数,该函数将发送请求并获取JSON对象:
function GetData() {
var request = {};
$.ajax({
type: "POST",
url: "Default.aspx/GetUsersList",
data: request,
contentType: "application/json; charset=utf-8",
dataType: "json",
dataFilter: OnDataFilter,
success: OnSuccess,
error: OnError
});
}
function OnDataFilter(data) {
var dataObj = eval("(" + data + ")");
if (dataObj.hasOwnProperty("d"))
return dataObj.d;
return dataObj;
}
JSON对象将返回值到onSuccess函数,如果发生错误,则返回onError函数。
function OnSuccess(data) {
alert(data);
// 写逻辑如何显示数据在屏幕上。
// 这里写逻辑以显示记录,例如在div中显示数据
}
function OnError(data) {
var err = eval("(" + data.responseText + ")");
alert(err.Message);
}
在客户端点击时,将调用GetData()函数。
结论:使用三层架构,可以制作基于Web的项目和基于Windows窗体的项目。现在代码也减少了,因为不需要使用LINQ编写数据访问层和业务层。LINQ是微软引入的新技术。它更快地从数据库中获取数据,jQuery通过JSON对象发送和获取数据,这将在网络上以减少的数据包数量传输。