介绍我们是如何为程序插上Linq的翅膀的?!

rel="File-List" href="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_filelist.xml" />

这里是我对面向对象数据库的接口定义:

 

public interface IDomain : IDisposable

{

    void Save(object obj);  //更新和新增是同一个方法。

    void Delete(object obj);

    void Commit();

    void Rollback();

    IEnumerable <T> Cast <T>();

}

 

当然其实现方法应该尽量满足我在另一个帖子中的描述

 

例如我们要创建一个系统用户,同时把它注册到出差不报销干活不拿钱两个用户组里边,我们可以写:

 

using(var x=new Domain(服务器的Endpoint))

{

  var newUser=new User{Name="张三", Password="adfadf", Email="zhang@hotmail.worldcomputer};

  var userGroups=from Group g in x where g.Name=="出差不报销" ¦ ¦ g.Name=="干活不拿钱" select g;

  userGroup.Foreach(g=>

  {

    g.AddUser(newUser);

    x.Save(g);

  });

  x.Commit();

}

 

由于面向对象的ORM应该自动保存缓冲区中的所有对象,因此我们并不需要保存那个newUser,保存(更新)Group就自动保存了newUser

 

IDomain这里,实际上只有Cast是新的(相对于数据库历史而言),是Linq给我们带来的优雅的查询方案。如果我的数据库存储是DataTable,那么我只要在一个static class中这样写一个扩展方法:

 

static public IEnumable <T> Cast <T>(this DataTable tbl) where T:User

{

  var ret=new List <User>();

  foreach(DataRow r in tbl.rows)

    ret.Add(new User{Name=r["name"],Email=r["email"],Password=r["password"]});

  return ret;

}

 

这样就可以在任何地方写查询:

 

DataTable tbl= myDataSets.Table["users"];

var query=from User u in tbl where u.Name=="张三" select u;

 

我在IDomain接口中的仅仅Cast这一个定义,类似于上面我们对保存有User类对象的DataTable追加一个Cast方法的做法,对于你的任 何原先的数据库设计只要增加这一个方法,就跟Linq“挂上了钩,可以享受到Linq的功能了。当然,如果你觉得我写的DataTableCast 法效率不高,可以再使用QueryProvider的概念去重新设计Cast(例如返回一个IQueryable <T>类型的结果),使得query自己在运行时编译自己的查询规划步骤。但是无论如何,Linq是非常容易使人对任何旧的数据管理程序 中的查询进行翻新的。不是只有linq to sql之类现成的那几个类库才用到了Linq,我们从自己的旧的数据管理程序出发去扩展出Cast,就能用Linq处理旧的程序对象了。将旧的对象类 型,看起来完全不可能为了查询语法改变而重写一边的业务类型,很轻便地利用Linq处理,这才是Linq的最激动人心的地方!

转自:http://topic.csdn.net/u/20080518/15/4bceafc2-450f-4b7a-a9c3-03fb54f8eb98.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LINQ(Language Integrated Query)是C#语言中的一种查询语法和技术,用于在编程语言中执行数据查询和转换操作。 作用: 1. 简化数据查询:LINQ提供了一种统一的查询语法,可以用于查询各种类型的数据,包括对象集合、数组、数据库等。它大大简化了数据查询的代码编写过程。 2. 提高代码可读性:LINQ使用类似于自然语言的查询语法,使得代码更易读和理解。通过使用LINQ,可以将复杂的查询逻辑转换为简洁、清晰的代码。 3. 提供强类型检查:LINQ在编译时对查询进行类型检查,减少了常见的运行时错误,并提供了更好的代码安全性。 用法: 1. 查询语法:使用类SQL语法的查询表达式,包括from、where、select、group by、order by等关键字。例如: ```csharp var query = from student in studentList where student.Age > 18 select student.Name; ``` 2. 方法语法:使用方法调用链的方式进行查询,通过一系列的操作符(如Where、Select、OrderBy等)进行数据筛选、转换和排序。例如: ```csharp var query = studentList.Where(student => student.Age > 18) .Select(student => student.Name); ``` 3. 查询结果处理:可以将查询结果直接作为集合返回,也可以使用ToList、ToArray等方法将查询结果转换为具体的集合类型。 4. 内置的查询操作符:LINQ提供了一系列内置的查询操作符,如Where、Select、OrderBy、GroupBy、Join等,可以根据需要选择合适的操作符进行数据查询和转换。 总之,LINQ是一种强大的数据查询和转换技术,它可以大大简化数据查询的代码编写过程,并提高代码的可读性和可维护性。通过使用LINQ,可以更加方便地对各种类型的数据进行查询、过滤、排序和转换操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值