1:创建实体类
   首先为你项表达的数据库数据建立实体类,以后的Demo所用的数据库为Northwind;
    针对产品表(Products)创建产品类

Linq学习笔记(2.1)——初识 DLinq[Table(Name = "Products")]
Linq学习笔记(2.1)——初识 DLinq
public class Product
}

      为Product类附加Table特性,表示该类对应数据库的Products表,为Product类的属性附加Column特性对应Products表中的列,Column特性有很多属性,如Name,CanBeNull方便你精确表达数据库表的特征,和上例中[Column(IsPrimaryKey=true)]表示用Product的ProductID属性表达数据库表Products的主键。
Linq学习笔记(2.1)——初识 DLinq

2:DataContext为你从数据库中取回对象或提交修改的管道,

Linq学习笔记(2.1)——初识 DLinqDataContext db = new DataContext("data source=.\\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=Northwind;");
Linq学习笔记(2.1)——初识 DLinqTable
<Product> Products = db.GetTable<Product>();
接着我们使用Linq表达式,从上面查询的Table集合中过滤我们想要的内容。
Linq学习笔记(2.1)——初识 DLinqvar Discontinueds = from p in Products
Linq学习笔记(2.1)——初识 DLinq                            where p.Discontinued 
== true
Linq学习笔记(2.1)——初识 DLinq                            select p;
Linq学习笔记(2.1)——初识 DLinqvar DiscontinuedsCount 
= Discontinueds.Count();
Linq学习笔记(2.1)——初识 DLinq
Linq学习笔记(2.1)——初识 DLinqResponse.Write(
string.Format("一共{0}个产品被废弃,他们是:<br>", DiscontinuedsCount));
Linq学习笔记(2.1)——初识 DLinq
foreach (var p in Discontinueds)
Linq学习笔记(2.1)——初识 DLinqResponse.Write(
string.Format("<div class='showinfo'>price: {1};&nbsp;name: {0}</div>", p.ProductName, p.UnitPrice.ToString()));
上述代码的结果:
Linq学习笔记(2.1)——初识 DLinq

推荐定义一个强类型的DataContext取代基本的DataContext类型,然后声明所有的Table集合为Context的成员。
Linq学习笔记(2.1)——初识 DLinqpublic partial class Northwind : DataContext
}

Linq学习笔记(2.1)——初识 DLinqNorthwind db = new Northwind("data source=.\\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=Northwind;");
Linq学习笔记(2.1)——初识 DLinqTable
<Product> Products = db.Products;
Linq学习笔记(2.1)——初识 DLinq
Linq学习笔记(2.1)——初识 DLinq var Discontinueds 
= from p in Products
Linq学习笔记(2.1)——初识 DLinq                              where p.UnitPrice 
> 50
Linq学习笔记(2.1)——初识 DLinq                              orderby p.UnitPrice
Linq学习笔记(2.1)——初识 DLinq                              select p;
Linq学习笔记(2.1)——初识 DLinq 
foreach (var p in Discontinueds)
Linq学习笔记(2.1)——初识 DLinq Response.Write(
string.Format("<div class='showinfo'>price: {1};&nbsp;name: {0}</div>", p.ProductName, p.UnitPrice.ToString()));
结果显示:
Linq学习笔记(2.1)——初识 DLinq

3:定义关系:
     在关系型数据库中通过主外键来表达各个表之间的关系,Dlinq定义了一个Association特性,你将它附加在你的实体类的某个成员上来表达各个实体间的关系。
#endregion
结果显示:
Linq学习笔记(2.1)——初识 DLinq
    除了上面直接将关系定义在实体内部外,还有一种简便方法,直接用Linq交叉查询的方法在两个Table集合中联合查询。
Linq学习笔记(2.1)——初识 DLinqvar order = from p in db.Products
Linq学习笔记(2.1)——初识 DLinq                    from o 
in db.OrderDetails
Linq学习笔记(2.1)——初识 DLinq                    where p.ProductID 
== 50 && o.ProductID==p.ProductID
    显示的结果和上面一样。

4:添加,删除,修改实体
    对实体的修改,删除等操作也一样非常简单,你完全可以忘记你现在是在操作数据库!
Linq学习笔记(2.1)——初识 DLinqvar product1 = db.Products.Single(p => p.ProductID == 1);
Linq学习笔记(2.1)——初识 DLinq        product1.ProductName 
= "Young's book";
Linq学习笔记(2.1)——初识 DLinq
        db.SubmitChanges();
    当然上面的删除和添加操作还需要更健全的实体类,如Product类的ProductID属性,他所附加的Column还需要加上IsDBGenerated = true,因为该列是系统自动产生的自增型整数,在删除product1时,会提示你该实体和OrderDetails有关联,不允许直接删除该product。这些都很简单,稍微摸索摸索就能明白,下次我会作个完整的Demo来完成数据的CURD及多表联合操作!刚刚学完这一部分,感觉比起NHibernate,iBATIS,简单的不止一丁点,像以前学NHibernate,问题一个接一个,网上到处找帖子,发问题,搞了一个多星期才基本上"会用",而用Linq到目前为止完成我用NHibernate的那些功能没有遇到一点阻塞,当然,我现在也刚刚在学,孰是孰非我还不敢乱下评论,有比较熟悉,有兴趣的朋友可以研究比较以下他们的性能!

相关文章:

  • 2021-11-27
  • 2021-07-29
  • 2022-12-23
  • 2021-06-02
  • 2022-12-23
  • 2021-12-10
  • 2021-10-11
猜你喜欢
  • 2021-12-01
  • 2022-12-23
  • 2021-06-14
  • 2021-08-06
  • 2021-12-27
  • 2021-12-07
  • 2021-05-02
相关资源
相似解决方案