Linq技术是在C# 3.0里面发布的,最初包含Linq to SQL, Linq to Object 和Linq to xml。然后在4.0里面发布了DLR动态语言运行时,所以有了Linq动态实现方式。
介绍一下命名空间:
System.Linq;
System.Linq.Expressions;
System.XML.Linq;
System.Data.Linq;
介绍一下Linq相关的接口:
IEnumerable<T>, IQueryable<T>
任何继承了上面接口的对象都可以使用Linq技术。
先说Linq to SQL:
在Visual Studio 2010里面可以创建Linq To SQL类,直接在项目里面选择新增Linq to Sql即可。目前最新版本Visual Studio 2013里面也支持Linq to Sql,还多了几种选择:devart Entity Model, Devart Linq to SQL Model, Devart NHibernate Model. 来说一下Devart,Devart是Devart Software,一家软件公司,扩充了这些方法。可访问:http://forums.asp.net/t/1725858.aspx?New+Version+of+Devart+Entity+Developer+with+ENUM+Support+and+Other+Enhancements
Linq to SQL class和Devart Linq to SQL Model有些细微差别,如果是Linq to SQL class,可以直接把SQL stored procedure和function当作一个实体来操作,可以自己选择将哪些表添加到DBContext里面,但Devart是默认全部添加,不能添加SP和function。Linq to SQL不具有code first或model first的功能,默认操作是database first, 但Devart具有两种选择,这个可以算是Linq to SQL的升级应用,微软可能选择停止更新Linq to SQL。
Microsoft Linq to SQL编辑窗口:
Devart编辑窗口:
Devart 新建窗口:
在操作上没有多大区别,看看具体增删改和查询怎么操作:
//实例化DBContext
OTPDataContext devartDB = new OTPDataContext();
DataClasses1DataContext dbContext = new DataClasses1DataContext();
//返回特定行数的列表
public IQueryable<DataListForDemo> GetList(int count)
{
var dataList = dbContext.DataListForDemos.Take(count);
return dataList;
}
//新增数据
public void insertDB(DataListForDemo model)
{
dbContext.DataListForDemos.InsertOnSubmit(model);
dbContext.SubmitChanges();
}
//删除数据
public void deleteData(DataListForDemo model)
{
dbContext.DataListForDemos.DeleteOnSubmit(model);
dbContext.SubmitChanges();
}
//修改单行数据
public void updateDBByID(DataListForDemo model)
{
DataListForDemo iModel = dbContext.DataListForDemos.Where(p => p.ID == model.ID).SingleOrDefault();
iModel.col1 = model.col1;
iModel.col2 = model.col2;
iModel.col3 = model.col3;
dbContext.SubmitChanges();
}
//修改多行数据
public void updateDBMulti(DataListForDemo model)
{
var iModel = dbContext.DataListForDemos.Where(p => p.col1 == model.col1);
foreach(DataListForDemo m in iModel)
{
m.col2 = model.col2;
m.col3 = model.col3;
}
dbContext.SubmitChanges();
}
<add name="UTConsoleApplication.Properties.Settings.OTPConnectionString"
connectionString="Data Source=localhost;Initial Catalog=OTP;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
base(global::UTConsoleApplication.Properties.Settings.Default.OTPConnectionString, mappingSource)
{
OnCreated();
}
// Summary:
// Initializes a new instance of the System.Data.Linq.DataContext class by referencing
// a file source and a mapping source.
//
// Parameters:
// fileOrServerOrConnection:
// This argument can be any one of the following:The name of a file where a
// SQL Server Express database resides.The name of a server where a database
// is present. In this case the provider uses the default database for a user.A
// complete connection string. LINQ to SQL just passes the string to the provider
// without modification.
//
// mapping:
// A source for mapping.
public DataContext(string fileOrServerOrConnection, MappingSource mapping);