博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Db4o结合Linq、Lambda表达式的简单示例
阅读量:6569 次
发布时间:2019-06-24

本文共 2019 字,大约阅读时间需要 6 分钟。

大多数人接触Db4o的查询,都是从“样本查询”(Query by Example)开始的,这种查询方式简单但不方便,功能和性能也很受局限。以下是引自官方的样本查询示例:

// retrievePilotByNamePilot proto=new Pilot("Michael Schumacher",0);ObjectSet result=db.get(proto);listResult(result);

这种查询要求我们先建立一个样本,然后再交由Db4o根据此样本返回符合条件的数据,其主要的不便之处在于对类默认值的处理及组合条件查询上,同时其执行性能是很差的。

而当Db4o开始支持.Net 3.5之后,我们就有了更为简单且又十分方便而强大的选择了,让我们来一起领略Db4o与.Net 3.5擦出的火花之美吧:

 

准备工作

首先创建一个命令行应用程序。

书写一个简单的“学生”类:

public class 学生

{
    static Random R = new Random();

    public 学生(int 学号)

    {
        this.学号 = 学号;
        性别 = R.Next(2) == 1;
        成绩 = R.Next(101);
    }

    public int 学号 { get; set; }

    public bool 性别 { get; set; }
    public int 成绩 { get; set; }

    public override string ToString()

    {
        return string.Format("学号:{0:0000} 性别:{1} 成绩:{2}", 学号, 性别 ? "男" : "女", 成绩);
    }
}

该类就是用于模拟学生的数据,性别和成绩都是在构造时随机生成的。
然后引入Db4o对应.Net 3.5版的dll:
 
引入命名空间:

using Db4objects.Db4o;

using Db4objects.Db4o.Linq;

在Main函数中编写代码:

var db = Db4oFactory.OpenFile("db.db4o");

for (int i = 0; i < 5000; i++)

{
    db.Store(new 学生(i));
}

这段代码用于打开数据库,并存储5000个学生数据到数据库中。
 

Linq查询

接着编写Linq查询代码,将查询到的集合存入变量l中:

var l = (from 学生 q in db

            where !q.性别 && q.成绩 == 100
            orderby q.学号 descending
            select q).Take(5);

这里我们查询的是所有成绩为100的女生,并将结果按学号降序排列,取最前面的5位。

由此可看出Db4o与Linq结合的非常紧密,我们在使用Linq查询时完全没有任何不适应感,依然是得心应手的感觉。

然后遍历并输出一下结果:

foreach (var f in l)

{
    Console.WriteLine(f);
}

Console.ReadLine();

查询结果输出:

 

Lambda表达式查询

其实这个在支持Linq之前就已经获得支持了,或者说支持Lambda表达式这项工作根本不是Db4o开发人员的工作范畴。

我们知道Lambda表达式其实就是一个委托,而Db4o的原生查询(Native Queries)所需的参数就是一个委托,所以也就说在.Net框架引入Lambda表达式的时候,它就已经可以被用在Db4o查询中了。以下是引自官方的原生查询示例:

IList 
pilots = db.Query
(delegate(Pilot pilot) { return pilot.Points == 100;});

你可以很轻松的把它改为Lambda表达式形式:

IList <Pilot> pilots = db.Query <Pilot> (q=>q.Points ==100);

这样就简明许多了吧?

同理,上文的Linq查询也可以改作:

var l = db.Query<学生>(q => !q.性别 && q.成绩 == 100).OrderByDescending(q => q.学号).Take(5);

得到的结果是等同的,而书写上更为方便,推荐使用。

 

结语

Db4o很好很强大,现在很多一流大企业也都开始使用它了,它在开发效率和数据持久化方式上都带来了质的革新,绝对值得我们学习和使用。

推荐学习资料: 

 

下载

示例源代码:

本文的XPS版本:

本文转自斯克迪亚博客园博客,原文链接http://www.cnblogs.com/SkyD/archive/2010/09/08/1821074.html,如需转载请自行联系原作者

你可能感兴趣的文章
MongoDB分片
查看>>
Centos编译安装Nginx
查看>>
【WebApp】离线webapp (android)开发
查看>>
如何做好网站SEO优化,需要会什么?
查看>>
网站建设与管理的基本流程
查看>>
spring上传文件并限制大小配置以及全局异常处理
查看>>
Windows下NDK直接编译编译boost 1.55(X86版本)
查看>>
系统重装后重新配置mysql
查看>>
FUSIONCHART 图例清空解决 ID 占用重复
查看>>
OPPO R17谍照现身 机身采用“叠层流光点彩工艺”
查看>>
基于Docker-compose部署wiki-confluence6.10
查看>>
函数PulseEvent()
查看>>
config.inc.php详细参数介绍
查看>>
1学习之初、约定、认识linux
查看>>
获取 dhcp IP 过程分析 - 每天5分钟玩转 OpenStack(91)
查看>>
面向VMware vCenter的戴尔管理插件的更新1现在已经发布,支持ESXi 5.0
查看>>
003 about zip command in window system
查看>>
guzz批量更新程序
查看>>
范畴:组合的本质
查看>>
中国北方国际射击场
查看>>