<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_mapserver</title><subtitle type="text">MicroOrm.Net http://code.google.com/p/micro-orm-net/</subtitle><id>http://feed.cnblogs.com/blog/u/11820/rss</id><updated>2012-04-12T07:40:22Z</updated><author><name>mapserver</name><uri>http://www.cnblogs.com/mapserver/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mapserver/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/11820/rss"/><entry><id>http://www.cnblogs.com/mapserver/archive/2012/04/12/2443974.html</id><title type="text">MicroOrm.Net和现有ORM产品的对比</title><summary type="text">MicroOrm.Net主页：http://code.google.com/p/micro-orm-net/MicroOrm.Net系列随便目录总览：http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html我写了一个系列的文章来介绍MicroOrm.Net，期间不断有同学来打击我，说没有特色，说是重复造轮子，我在写系列文章的开篇，就说了我不打算去和任何产品进行比较，但是很多同学都是眼睛一瞄就开始轻易的下定论，所以我觉得还是来详细说明MicroOrm.Net产生的背景以及和现有的ORM进行一个简单比较。MicroOrm.Ne</summary><published>2012-04-12T07:14:00Z</published><updated>2012-04-12T07:14:00Z</updated><author><name>mapserver</name><uri>http://www.cnblogs.com/mapserver/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mapserver/archive/2012/04/12/2443974.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mapserver/archive/2012/04/12/2443974.html"/><content type="html">&lt;p&gt;MicroOrm.Net主页：&lt;/p&gt;&lt;p data-mce-=""&gt;&lt;a href="http://code.google.com/p/micro-orm-net/"&gt;http://code.google.com/p/micro-orm-net/&lt;/a&gt;&lt;/p&gt;&lt;p data-mce-=""&gt;MicroOrm.Net系列随便目录总览：&lt;/p&gt;&lt;p data-mce-=""&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html"&gt;http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html&lt;/a&gt;&lt;/p&gt;&lt;p data-mce-=""&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-mce-=""&gt;我写了一个系列的文章来介绍MicroOrm.Net，期间不断有同学来打击我，说没有特色，说是重复造轮子，我在写系列文章的开篇，就说了我不打算去和任何产品进行比较，但是很多同学都是眼睛一瞄就开始轻易的下定论，所以我觉得还是来详细说明MicroOrm.Net产生的背景以及和现有的ORM进行一个简单比较。&lt;/p&gt;&lt;p data-mce-=""&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-mce-=""&gt;MicroOrm.Net是我现在产品中用到的一个ORM产品，产品立项初期在ORM的选择上，也是费了很多时间，但是最后决定来自己写。在MicroOrm.Net 1.0 beta出来后，使用起来感觉还不错，于是有了开源的想法，也算为同学们做点贡献。&lt;/p&gt;&lt;p data-mce-=""&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-mce-=""&gt;MicroOrm.Net的特色：&lt;/p&gt;&lt;p data-mce-=""&gt;1、可以不定义强类型Model；当然也支持强类型的Model：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;var od = db.OrderDetail.Query()&lt;br/&gt;        .Where(db.OrderDetail.OrderId == "001")&lt;br/&gt;        .First();&lt;br/&gt;string orderId = od.OrderId;&lt;br/&gt;int qty = od.Qty;&lt;br/&gt;&lt;/div&gt;&lt;p data-mce-=""&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-mce-=""&gt;2、不用去定义Model和Model之间的Mapping&lt;/p&gt;&lt;p data-mce-=""&gt;3、在多个表关联查询，每个表中取部分列来做返回结果时，不用像传统的ORM那样，需要一个Model去关联另一个Model，关联了一大堆的Model；而在MicroOrm.Net里，一切都可以用Select子句来搞定&lt;/p&gt;&lt;p data-mce-=""&gt;4、抛弃上下文&lt;/p&gt;&lt;p data-mce-=""&gt;5、大量使用动态对象，一切都是那么随心所欲&lt;/p&gt;&lt;p data-mce-=""&gt;6、MicroOrm.Net源代码很小（代码量应该在3K～4K行左右，我没有去统计），自己修改和定制很简单&lt;/p&gt;&lt;p data-mce-=""&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-mce-=""&gt;VS EF &amp;amp; NHibernate &amp;amp; iBatis&lt;/p&gt;&lt;p data-mce-=""&gt;1、MicroOrm.Net和EF、NHibernate不在一个数量级上&lt;/p&gt;&lt;p data-mce-=""&gt;2、EF、NHibernate都必须定义Model，都必须去Mapping（不管是xml方式，还是代码方式），这也是MicroOrm.Net产生的一个最重要的原因&lt;/p&gt;&lt;p data-mce-=""&gt;3、庞大&lt;/p&gt;&lt;p data-mce-=""&gt;4、性能问题&lt;/p&gt;&lt;p data-mce-=""&gt;5、NHibernate、iBatis配置复杂&lt;/p&gt;&lt;p data-mce-=""&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-mce-=""&gt;VS Dapper.Net&lt;/p&gt;&lt;p data-mce-=""&gt;Dapper.Net性能很好，但是需要自己来写Sql语句，对支持多数据库很累&lt;/p&gt;&lt;p data-mce-=""&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-mce-=""&gt;VS Simple.Data&lt;/p&gt;&lt;p data-mce-=""&gt;Simple.Data是一个很不错的项目，我在写MicroOrm.Net打算用它，我详细的阅读了他的源代码，也做了大量的测试，但是最后放弃了&lt;/p&gt;&lt;p data-mce-=""&gt;1、代码复杂&lt;/p&gt;&lt;p data-mce-=""&gt;2、方法太灵活，比如查询，有很多中查询方式，在MicroOrm.Net里，所有的查询都统一的Query方法上了&lt;/p&gt;&lt;p data-mce-=""&gt;3、Bug问题&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mapserver/aggbug/2443974.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/12/2443974.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mapserver/archive/2012/04/12/2443215.html</id><title type="text">MicroOrm.Net（8） Table.Query() - Distinct、Skip &amp;amp; Take</title><summary type="text">MicroOrm.Net主页：http://code.google.com/p/micro-orm-net/MicroOrm.Net系列随便目录总览：http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html前面的文章，我们已经讲解了MicroOrm.Net查询的绝大部分内容，本文将来讲解查询中经常使用的最后几个功能。Skip&amp;Take：主要使用在查询分页上，api如下：Query Skip(int skip)Query Take(int take)两个方法都只有一个int类型的参数，使用方法如下：db.OrderD</summary><published>2012-04-12T05:24:00Z</published><updated>2012-04-12T05:24:00Z</updated><author><name>mapserver</name><uri>http://www.cnblogs.com/mapserver/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mapserver/archive/2012/04/12/2443215.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mapserver/archive/2012/04/12/2443215.html"/><content type="html">&lt;p&gt;MicroOrm.Net主页：&lt;/p&gt;&lt;p data-mce-=""&gt;&lt;a href="http://code.google.com/p/micro-orm-net/"&gt;http://code.google.com/p/micro-orm-net/&lt;/a&gt;&lt;/p&gt;&lt;p data-mce-=""&gt;MicroOrm.Net系列随便目录总览：&lt;/p&gt;&lt;p data-mce-=""&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html"&gt;http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html&lt;/a&gt;&lt;/p&gt;&lt;p data-mce-=""&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-mce-=""&gt;前面的文章，我们已经讲解了MicroOrm.Net查询的绝大部分内容，本文将来讲解查询中经常使用的最后几个功能。&lt;/p&gt;&lt;p data-mce-=""&gt;Skip&amp;amp;Take：主要使用在查询分页上，api如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;Query Skip(int skip)&lt;br/&gt;Query Take(int take)&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;两个方法都只有一个int类型的参数，使用方法如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;db.OrderDetail.Query()&lt;br/&gt;        .Skip(10)&lt;br/&gt;        .Take(10)&lt;br/&gt;&lt;/div&gt;&lt;p&gt;上面代码表示取第11笔到第20笔的资料，在MicroOrm.Net的sql server部分，使用了ROW_NUMBER()、OVER()两个内置函数&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Distinct：过滤掉重复的数据，api如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;Query Distinct()&lt;br/&gt;&lt;/div&gt;&lt;p&gt;它没有任何参数参入，使用代码如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;db.OrderDetail.Query()&lt;br/&gt;        .Select(db.OrderDetal.ProductId)&lt;br/&gt;        .Distinct()&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Distinct、Skip &amp;amp; Take都很简单，但是需要注意的是，这三个方法都只能在一个MicroOrm.Net的Query对象上只能执行一次，下面的代码将会报错。&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: line-through; background-color: #ff0000;"&gt;db.OrderDetail.Query()&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: line-through; background-color: #ff0000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .Skip(10).Skip(1)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: line-through; background-color: #ff0000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .Take(10).Take(1)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: line-through; background-color: #ff0000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .Distinct().Distinct()&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;MicroOrm.Net的查询部分到此就结束了，我们以一个稍微复杂点的代码来结束本篇文章：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;var od = db.OrderDetail.Query()&lt;br/&gt;        .Where(db.OrderDetail.OrderId == "001")&lt;br/&gt;        .Where(db.OrderDetail.Qty &amp;gt; "0")&lt;br/&gt;        .Where(db.Order.CustomerId == "001")&lt;br/&gt;        .GroupBy(db.OrderDetail.OrderId)&lt;br/&gt;        .Join(db.Order, db.Order.OrderId == db.OrderDetail.OrderId)&lt;br/&gt;        .Skip(0)&lt;br/&gt;        .Take(1)&lt;br/&gt;        .OrderBy(db.OrderDetail.OrderId)&lt;br/&gt;        .Having(db.OrderDetail.Qty.Sum() &amp;gt; 0)&lt;br/&gt;        .Select(db.OrderDetail.OrderId, db.OrderDetail.Qty.Sum())&lt;br/&gt;        .First();&lt;br/&gt;&lt;/div&gt;&lt;p&gt;在SQL Server产生的SQL语句如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;exec sp_executesql N'SELECT * FROM (SELECT [_#0_].[OrderId] [OrderId],SUM([_#0_].[Qty]) [Qty] ,ROW_NUMBER() OVER( ORDER BY [_#0_].[OrderId] ASC) [_ROW_NUMBER_] FROM [dbo].[OrderDetail] [_#0_] INNER JOIN [dbo].[Order] [o] ON o.[OrderId]=_#0_.[OrderId] WHERE [_#0_].[OrderId] = @p0 AND [_#0_].[Qty] &amp;gt; @p1 AND [o].[CustomerId] = @p2 GROUP BY [_#0_].[OrderId] HAVING SUM([_#0_].[Qty]) &amp;gt; @p3 ) _Data WHERE [_ROW_NUMBER_] BETWEEN 0 AND 1 ',N'@p0 nvarchar(3),@p1 int,@p2 nvarchar(3),@p3 int',@p0=N'001',@p1=0,@p2=N'001',@p3=0&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-mce-=""&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mapserver/aggbug/2443215.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/12/2443215.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mapserver/archive/2012/04/12/2443199.html</id><title type="text">MicroOrm.Net（7） Table.Query() - Group By &amp;amp; Having</title><summary type="text">MicroOrm.Net主页：http://code.google.com/p/micro-orm-net/MicroOrm.Net系列随便目录总览：http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html本文我们来讲解MicroOrm.Net的Group By和Having的用法，请看Group By的api：Query GroupBy(params Column[] columns)方法的参数只有Column集合这一种类型，用法很简单，请看下面的代码：db.OrderDetail.Query() .Gro...</summary><published>2012-04-11T16:41:00Z</published><updated>2012-04-11T16:41:00Z</updated><author><name>mapserver</name><uri>http://www.cnblogs.com/mapserver/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mapserver/archive/2012/04/12/2443199.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mapserver/archive/2012/04/12/2443199.html"/><content type="html">&lt;p&gt;MicroOrm.Net主页：&lt;/p&gt;&lt;p data-mce-=""&gt;&lt;a href="http://code.google.com/p/micro-orm-net/"&gt;http://code.google.com/p/micro-orm-net/&lt;/a&gt;&lt;/p&gt;&lt;p data-mce-=""&gt;MicroOrm.Net系列随便目录总览：&lt;/p&gt;&lt;p data-mce-=""&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html"&gt;http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html&lt;/a&gt;&lt;/p&gt;&lt;p data-mce-=""&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-mce-=""&gt;本文我们来讲解MicroOrm.Net的Group By和Having的用法，请看Group By的api：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;Query GroupBy(params Column[] columns)&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;方法的参数只有Column集合这一种类型，用法很简单，请看下面的代码：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;db.OrderDetail.Query()&lt;br/&gt;        .GroupBy(db.OrderDetail.ProductId)&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;熟悉SQL的同学都知道，在Group By和Select配合使用的时候，出现在Group By子句中的Column可以被直接Select，没有出现在Group By子句中的Column必须经过聚合后才能被Select&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: line-through;"&gt;&lt;span style="background-color: #ff0000;"&gt;db.OrderDetail.Query()&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: line-through;"&gt;&lt;span style="background-color: #ff0000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .GroupBy(db.OrderDetail.ProductId)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: line-through;"&gt;&lt;span style="background-color: #ff0000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .Select(db.OrderDetail.OrderId)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;上面的代码将会出错，因为Select子句里的OrderDetail.OrderId未出现在Group By子句中，同时也没有被聚合。&lt;/p&gt;&lt;p&gt;上面的代码等价于如下的SQL：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;select OrderId from OrderDetail group by ProductId &lt;br/&gt;&lt;/div&gt;&lt;p&gt;执行这句SQL，SQL Server报错信息如下：&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000; font-size: 13px;"&gt;Msg 8120, Level 16, State 1, Line 1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #ff0000; font-size: 13px;"&gt;Column 'OrderDetail.OrderId' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Group By时，Select使用Column聚合函数代码如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;db.OrderDetail.Query()&lt;br/&gt;        .GroupBy(db.Order.ProductId)&lt;br/&gt;        .Select(db.Order.ProductId, db.OrderDetail.Qty.Sum().As("Sum"))&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Having一般都和Group By搭配来使用，上面我们演示了Group By的用法，我们再来看看Having的用法，至于到底什么是Having，请大家自己去Google&lt;/p&gt;&lt;p&gt;Having方法的api：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;Query Having(Expression criteria)&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;在Group By子句中出现的Column，能直接在Having方法Expression里使用；未出现在Group By子句里的Column，要在Having方法Expression里使用时，必须要聚合。这和上面Group By后Select一样。&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: line-through;"&gt;&lt;span style="background-color: #ff0000;"&gt;&lt;span data-mce-=""&gt;db.OrderDetail.Query()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: line-through;"&gt;&lt;span style="background-color: #ff0000;"&gt;&lt;span data-mce-=""&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .GroupBy(db.OrderDetail.ProductId)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: line-through;"&gt;&lt;span style="background-color: #ff0000;"&gt;&lt;span data-mce-=""&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .Having(db.OrderDetail.Qty &amp;gt; 0)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;上面的代码将会出错，因为Having方法里的Expression参数用了 OrderDetail.Qty，但是它并未出现在Group By子句中。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Group By时，Having使用Column聚合函数代码如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;db.OrderDetail.Query()&lt;br/&gt;        .GroupBy(db.OrderDetail.ProductId)&lt;br/&gt;        .Having(db.OrderDetail.Qty.Sum &amp;gt; 0)&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;MicroOrm.Net支持的聚合函数有：Sum、Min、Max、Avg&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mapserver/aggbug/2443199.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/12/2443199.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mapserver/archive/2012/04/11/2443015.html</id><title type="text">MicroOrm.Net（6） Table.Query() - Join &amp;amp; Order By</title><summary type="text">MicroOrm.Net主页：http://code.google.com/p/micro-orm-net/MicroOrm.Net系列随便目录总览：http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html本文我们来演示MicroOrm.Net查询的Join部分，请看Join方法的api文档：Query Join(Table joinTable, Expression on)Query InnerJoin(Table joinTable, Expression on)Query LeftJoin(Table joinTab</summary><published>2012-04-11T13:40:00Z</published><updated>2012-04-11T13:40:00Z</updated><author><name>mapserver</name><uri>http://www.cnblogs.com/mapserver/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mapserver/archive/2012/04/11/2443015.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mapserver/archive/2012/04/11/2443015.html"/><content type="html">&lt;p&gt;MicroOrm.Net主页：&lt;/p&gt;&lt;p data-mce-=""&gt;&lt;a href="http://code.google.com/p/micro-orm-net/"&gt;http://code.google.com/p/micro-orm-net/&lt;/a&gt;&lt;/p&gt;&lt;p data-mce-=""&gt;MicroOrm.Net系列随便目录总览：&lt;/p&gt;&lt;p data-mce-=""&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html"&gt;http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html&lt;/a&gt;&lt;/p&gt;&lt;p data-mce-=""&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-mce-=""&gt;本文我们来演示MicroOrm.Net查询的Join部分，请看Join方法的api文档：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;Query Join(Table joinTable, Expression on)&lt;br/&gt;Query InnerJoin(Table joinTable, Expression on)&lt;br/&gt;Query LeftJoin(Table joinTable, Expression on)&lt;br/&gt;Query LeftOuterJoin(Table joinTable, Expression on)&lt;br/&gt;Query RightJoin(Table joinTable, Expression on)&lt;br/&gt;Query RightOuterJoin(Table joinTable, Expression on)&lt;br/&gt;&lt;/div&gt;&lt;p&gt;目前Join方法都需要手动传Expression参数，也就是关联表和被关联表之间的关联条件，虽然在DB可以设置表和表之间外键约束，而且也能通过代码抓取到外键约束，但在MicroOrm.Net查询Join，还是需要手动传入关联条件。&lt;/p&gt;&lt;p&gt;上面api中的Join方法等同于InnerJoin。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;简单代码如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;db.OrderDetail.Query()&lt;br/&gt;        .Join(db.Order, db.Order.OrderId == db.OrderDetail.OrderId)&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;如果关联条件不止一个时：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;db.Table1.Query()&lt;br/&gt;        .Join(db.Table2, db.Table1.Id1 == db.Table2.Id1 &amp;amp;&amp;amp; db.Table1.Id2 == db.Table2.Id2)&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;同样道理，也可以执行多次Join方法，关联多个表：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;db.OrderDetail.Query()&lt;br/&gt;        .Join(db.Order, db.Order.OrderId == db.OrderDetail.OrderId)&lt;br/&gt;        .Join(db.Product, db.Product.ProductId == db.OrderDetail.ProductId)&lt;br/&gt;        .RightJoin(db.Customer, db.Customer.CustomerId == db.Order.CustomerId)&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;上面我们演示了Join，下面来看看Order By，也先看Order By的api：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;Query OrderBy(params Column[] columns)&lt;br/&gt;Query OrderByAsc(params Column[] columns&lt;br/&gt;Query OrderByDesc(params Column[] columns)&lt;br/&gt;&lt;/div&gt;&lt;p&gt;上面api里的OrderBy方法等同于OrderByAsc方法&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;请看下面的代码示例：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;db.OrderDetil.Query()&lt;br/&gt;        .Join(db.Order, db.Order.OrderId == db.OrderDetail.OrderId)&lt;br/&gt;        .OrderBy(db.Order.CustomerId)&lt;br/&gt;        .OrderByDesc(db.OrderDetail.Qty)&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mapserver/aggbug/2443015.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/11/2443015.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mapserver/archive/2012/04/11/2442749.html</id><title type="text">MicroOrm.Net（5） Table.Query() - Select</title><summary type="text">MicroOrm.Net主页：http://code.google.com/p/micro-orm-net/MicroOrm.Net系列随便目录总览：http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html本文我们来演示MicroOrm.Net查询的Select部分，请看Select方法的api文档：Query Select(params MathE[] maths)Query Select(params Column[] columns)Select方法支持两种类型的参数，一种是Column的集合，一种是MathE（计算</summary><published>2012-04-11T10:09:00Z</published><updated>2012-04-11T10:09:00Z</updated><author><name>mapserver</name><uri>http://www.cnblogs.com/mapserver/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mapserver/archive/2012/04/11/2442749.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mapserver/archive/2012/04/11/2442749.html"/><content type="html">&lt;p&gt;MicroOrm.Net主页：&lt;/p&gt;&lt;p data-mce-=""&gt;&lt;a href="http://code.google.com/p/micro-orm-net/"&gt;http://code.google.com/p/micro-orm-net/&lt;/a&gt;&lt;/p&gt;&lt;p data-mce-=""&gt;MicroOrm.Net系列随便目录总览：&lt;/p&gt;&lt;p data-mce-=""&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html"&gt;http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html&lt;/a&gt;&lt;/p&gt;&lt;p data-mce-=""&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-mce-=""&gt;本文我们来演示MicroOrm.Net查询的Select部分，请看Select方法的api文档：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;Query Select(params MathE[] maths)&lt;br/&gt;Query Select(params Column[] columns)&lt;br/&gt;&lt;/div&gt;&lt;p&gt;Select方法支持两种类型的参数，一种是Column的集合，一种是MathE（计算式）的集合。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;我们先来看参数为Column集合的实例：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;db.OrderDetail.Query()&lt;br/&gt;        .Select(db.OrderDetail.OrderId, db.OrderDetail.Qty)&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Select的Column也支持别名：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;db.OrderDetail.Query()&lt;br/&gt;        .Select(db.OrderDetail.OrderId.As("Oid"), db.OrderDetail.Qty)&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Select的Column也支持运算，如我们想给查询结果的OrderId加一个"_Order"字符串后缀，对Qty的值加1：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;db.OrderDetail.Query()&lt;br/&gt;        .Select(db.OrderDetail.OrderId + "_Order", (db.OrderDetail.Qty + 1).As("Q"))&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;但是如果我想给查询结果的OrderId加一个"Order_"字符串前缀呢？&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: line-through; background-color: #ff0000;"&gt;db.OrderDetail.Query()&lt;/span&gt;&lt;br /&gt;&lt;span style="text-decoration: line-through; background-color: #ff0000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .Select("Order_" + db.OrderDetail.OrderId)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;上面的代码将会出错，.Net无法把Select的参数&amp;nbsp;&lt;span style="text-decoration: line-through; color: #000000; background-color: #ff0000;"&gt;"Order_" + db.OrderDetail.OrderId&lt;/span&gt;&amp;nbsp;转换为Column或者MathE。 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;因此我们将会利用Select的另外一个方法来实现：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;db.OrderDetail.Query()&lt;br/&gt;        .Select(new MathE("Order_", db.OrderDetail.OrderId, MathOperator.Add))&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;同理MathE也支持别名：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;db.OrderDetail.Query()&lt;br/&gt;        .Select((new MathE("Order_", db.OrderDetail.OrderId, MathOperator.Add)).As("Oid"))&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;当Select的时候，既有Column，也有MathE的时候，我们可以分多个Select来处理：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;db.OrderDetail.Query()&lt;br/&gt;        .Select((new MathE("Order_", db.OrderDetail.OrderId, MathOperator.Add)).As("Oid"))&lt;br/&gt;.Select(db.OrderDetail.Qty)&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Select还支持更多功能，如聚合函数，我们将在后面的文章中进行详细讲解。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mapserver/aggbug/2442749.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/11/2442749.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mapserver/archive/2012/04/08/2437666.html</id><title type="text">MicroOrm.Net（4） Table.Query() - Where</title><summary type="text">MicroOrm.Net主页：http://code.google.com/p/micro-orm-net/MicroOrm.Net系列随便目录总览：http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html本文我们来演示MicroOrm.Net的查询，请看Table.Query()的api文档：// ----------------------第一部分----------------------Query Where(Expression criteria)Query Select(params MathE[] maths</summary><published>2012-04-08T07:14:00Z</published><updated>2012-04-08T07:14:00Z</updated><author><name>mapserver</name><uri>http://www.cnblogs.com/mapserver/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mapserver/archive/2012/04/08/2437666.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mapserver/archive/2012/04/08/2437666.html"/><content type="html">&lt;p data-mce-=""&gt;MicroOrm.Net主页：&lt;/p&gt;&lt;p data-mce-=""&gt;&lt;a href="http://code.google.com/p/micro-orm-net/"&gt;http://code.google.com/p/micro-orm-net/&lt;/a&gt;&lt;/p&gt;&lt;p data-mce-=""&gt;MicroOrm.Net系列随便目录总览：&lt;/p&gt;&lt;p data-mce-=""&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html"&gt;http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html&lt;/a&gt;&lt;/p&gt;&lt;p data-mce-=""&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-mce-=""&gt;本文我们来演示MicroOrm.Net的查询，请看Table.Query()的api文档：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;// ----------------------第一部分----------------------&lt;br/&gt;Query Where(Expression criteria)&lt;br/&gt;Query Select(params MathE[] maths)&lt;br/&gt;Query Select(params Column[] columns)&lt;br/&gt;Query Join(Table joinTable, Expression on)&lt;br/&gt;Query InnerJoin(Table joinTable, Expression on)&lt;br/&gt;Query LeftJoin(Table joinTable, Expression on)&lt;br/&gt;Query LeftOuterJoin(Table joinTable, Expression on)&lt;br/&gt;Query RightJoin(Table joinTable, Expression on)&lt;br/&gt;Query RightOuterJoin(Table joinTable, Expression on)&lt;br/&gt;Query OrderBy(params Column[] columns)&lt;br/&gt;Query OrderByAsc(params Column[] columns&lt;br/&gt;Query OrderByDesc(params Column[] columns)&lt;br/&gt;Query GroupBy(params Column[] columns)&lt;br/&gt;Query Having(Expression criteria)&lt;br/&gt;Query Skip(int skip)&lt;br/&gt;Query Take(int take)&lt;br/&gt;Query Distinct()&lt;br/&gt;&lt;br/&gt;// ----------------------第二部分----------------------&lt;br/&gt;dynamic First()&lt;br/&gt;T First&amp;lt;T&amp;gt;()&lt;br/&gt;dynamic Last()&lt;br/&gt;T Last&amp;lt;T&amp;gt;()&lt;br/&gt;IList ToList()&lt;br/&gt;dynamic[] ToArray()&lt;br/&gt;IList&amp;lt;T&amp;gt; ToList&amp;lt;T&amp;gt;()&lt;br/&gt;T[] ToArray&amp;lt;T&amp;gt;()&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;上面的api分为两部分，第一部分的返回值都为Query对象，第二部分才会向数据库去执行sql语句，返回查询的结果。&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Where：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;db.OrderDatail.Query()&lt;br/&gt;        .Where(db.OrderDetail.OrderId == "001")&lt;br/&gt;        &lt;br/&gt;db.OrderDatail.Query()&lt;br/&gt;        .Where(db.OrderDetail.OrderId == "001" &amp;amp;&amp;amp; db.OrderDetail.Qty &amp;gt; 0)&lt;br/&gt;        &lt;br/&gt;db.OrderDatail.Query()&lt;br/&gt;        .Where(db.OrderDetail.OrderId == "001" &amp;amp;&amp;amp; (db.OrderDetail.Qty &amp;gt; 0 || db.OrderDetail.OrderDetailId == "001")&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;MicroOrm.Net也支持表的别名。即使定义了表的别名，在Where方法的表达式里，可以用表的别名，也可以不用。&lt;/p&gt;&lt;p&gt;Where方法，可以执行多次。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;db.OrderDatail.As("od").Query() //table alias&lt;br/&gt;        .Where(db.od.OrderId == "001")&lt;br/&gt;        .Where(db.OrderDetail.Qty &amp;gt; 0)&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Where方法的表达式也支持Like、IsNull、IsNotNull&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;db.OrderDatail.As("od").Query()&lt;br/&gt;        .Where(db.od.ProductId.IsNotNull())&lt;br/&gt;        .Where(db.od.ProductId.Like("CA%") &lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;下面演示向数据库执行sql语句：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;var od = db.OrderDetail.Query()&lt;br/&gt;                .Where(db.OrderDetail.OrderId == "001")&lt;br/&gt;                .First();&lt;br/&gt;&lt;/div&gt;&lt;p&gt;产生的sql语句如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;exec sp_executesql N'SELECT TOP 1 [_#0_].* FROM [dbo].[OrderDetail] [_#0_] WHERE [_#0_].[OrderId] = @p0 ',N'@p0 nvarchar(3)',@p0=N'001'&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;更多：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;var od1 = db.OrderDetail.Query()&lt;br/&gt;    .Where(db.OrderDetail.OrderId == "001")&lt;br/&gt;    .First&amp;lt;OrderDetail&amp;gt;();&lt;br/&gt;&lt;br/&gt;var od2 = db.OrderDetail.Query()&lt;br/&gt;    .Where(db.OrderDetail.OrderId == "001")&lt;br/&gt;    .Last();&lt;br/&gt;&lt;br/&gt;OrderDetail od3 = db.OrderDetail.Query()&lt;br/&gt;    .Where(db.OrderDetail.OrderId == "001")&lt;br/&gt;    .Last&amp;lt;OrderDetail&amp;gt;();&lt;br/&gt;&lt;br/&gt;IList ods1 = db.OrderDetail.Query()&lt;br/&gt;        .Where(db.OrderDetail.OrderId == "001")&lt;br/&gt;        .ToList(); &lt;br/&gt;&lt;br/&gt;dynamic[] ods2 = db.OrderDetail.Query()&lt;br/&gt;        .Where(db.OrderDetail.OrderId == "001")&lt;br/&gt;        .ToArray();&lt;br/&gt;&lt;br/&gt;IList&amp;lt;OrderDetail&amp;gt; ods3 = db.OrderDetail.Query()&lt;br/&gt;        .Where(db.OrderDetail.OrderId == "001")&lt;br/&gt;        .ToList&amp;lt;OrderDetail&amp;gt;();&lt;br/&gt;&lt;br/&gt;OrderDetail[] ods4 = db.OrderDetail.Query()&lt;br/&gt;        .Where(db.OrderDetail.OrderId == "001")&lt;br/&gt;        .ToArray&amp;lt;OrderDetail&amp;gt;(); &lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mapserver/aggbug/2437666.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/08/2437666.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mapserver/archive/2012/04/08/2437602.html</id><title type="text">MicroOrm.Net（3） Database、Table、Column、Expression、Math&amp;amp;MathE</title><summary type="text">MicroOrm.Net主页：http://code.google.com/p/micro-orm-net/MicroOrm.Net系列随便目录总览：http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html我们在开始详细讲解MicroOrm.Net的使用之前，先了解MicroOrm.Net里的几个动态对象：Database：数据库对象，我们在后面再详细讲解。Table：下面代码中db.OrderDetail就是一个Table对象，它和数据库里的OrderDetail相对应var od = db.OrderDetail;Co</summary><published>2012-04-08T06:17:00Z</published><updated>2012-04-08T06:17:00Z</updated><author><name>mapserver</name><uri>http://www.cnblogs.com/mapserver/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mapserver/archive/2012/04/08/2437602.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mapserver/archive/2012/04/08/2437602.html"/><content type="html">&lt;p&gt;MicroOrm.Net主页：&lt;/p&gt;&lt;p&gt;&lt;a href="http://code.google.com/p/micro-orm-net/"&gt;http://code.google.com/p/micro-orm-net/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;MicroOrm.Net系列随便目录总览：&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html"&gt;http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;我们在开始详细讲解MicroOrm.Net的使用之前，先了解MicroOrm.Net里的几个动态对象：&lt;/p&gt;&lt;p&gt;Database：数据库对象，我们在后面再详细讲解。&lt;/p&gt;&lt;p&gt;Table：下面代码中db.OrderDetail就是一个Table对象，它和数据库里的OrderDetail相对应&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;var od = db.OrderDetail;&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Column：下面代码中db.OrderDetail.ProductId就是一个Column对象，它和数据库里的OrderDetail表里的ProductId列对应&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;var q = db.OrderDetail.Query()&lt;br/&gt;        .Select(db.OrderDetail.ProductId);&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Expression：下面代码中db.OrderDetail.OrderId == "001"就是一个Expression对象&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;var q = db.OrderDetail.Query()&lt;br/&gt;        .Where(db.OrderDetail.OrderId == "001");&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Math&amp;amp;MathE：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;var q = db.OrderDetail.Query()&lt;br/&gt;        .Select(db.OrderDetail.OrderId + "_Order");&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;下面是这几个对象的api说明：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;//Database&lt;br/&gt;Database Open(string connectionStringName)&lt;br/&gt;CodeScope BeginCodeScope()&lt;br/&gt;Transaction BeginTransactionScope()&lt;br/&gt;&lt;br/&gt;Table xxx&lt;br/&gt;&lt;br/&gt;//Table&lt;br/&gt;Query Query()&lt;br/&gt;int Insert(Anonymous type object)&lt;br/&gt;int Insert(Model object)&lt;br/&gt;int Insert(IDictionary dict)&lt;br/&gt;int Insert(named arguments)&lt;br/&gt;int Update(Anonymous type object)&lt;br/&gt;int Update(Model object)&lt;br/&gt;int Update(IDictionary dict)&lt;br/&gt;int Update(named arguments)&lt;br/&gt;int Update(Expression criteria, Anonymous type object)&lt;br/&gt;int Update(Expression criteria, Model object)&lt;br/&gt;int Update(Expression criteria, IDictionary dict)&lt;br/&gt;int Update(Expression criteria, Named arguments)&lt;br/&gt;int Delete(Anonymous type object)&lt;br/&gt;int Delete(Model object)&lt;br/&gt;int Delete(IDictionary dict)&lt;br/&gt;int Delete(named arguments)&lt;br/&gt;int Delete(Expression criteria)&lt;br/&gt;&lt;br/&gt;//Expression&lt;br/&gt;Expression(object left, object right, ExpressionOperator @operator)&lt;br/&gt;&lt;br/&gt;static Expression operator ==(Expression left, Expression right)&lt;br/&gt;static Expression operator !=(Expression left, Expression right)&lt;br/&gt;static Expression operator &amp;lt;(Expression left, Expression right)&lt;br/&gt;static Expression operator &amp;lt;=(Expression left, Expression right)&lt;br/&gt;static Expression operator &amp;gt;(Expression left, Expression right)&lt;br/&gt;static Expression operator &amp;gt;=(Expression left, Expression right)&lt;br/&gt;static Expression operator &amp;amp;(Expression left, Expression right) static Expression operator |(Expression left, Expression right)&lt;br/&gt;static bool operator true(Expression e)&lt;br/&gt;static bool operator false(Expression e)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;//Math&lt;br/&gt;Math(object left, object right, MathOperator @operator)&lt;br/&gt;&lt;br/&gt;static Math operator +(Math column, object value)&lt;br/&gt;static Math operator -(Math column, object value)&lt;br/&gt;static Math operator *(Math column, object value)&lt;br/&gt;static Math operator /(Math column, object value)&lt;br/&gt;&lt;br/&gt;//MathE&lt;br/&gt;MathE As(string alias)&lt;br/&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/mapserver/aggbug/2437602.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/08/2437602.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mapserver/archive/2012/04/07/2436286.html</id><title type="text">MicroOrm.Net（2） 基础及动态特性</title><summary type="text">MicroOrm.Net主页：http://code.google.com/p/micro-orm-net/MicroOrm.Net系列随便目录总览：http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html在传统的orm中，我们操作Table的时候，必须先有Model的定义，但是在MicroOrm.Net中，我们可以不定义Model，来直接操作Table。假如我们在db中有OrderDetail这样一张表：CREATE TABLE [dbo].[OrderDetail]([OrderDetailId] [nvarchar</summary><published>2012-04-07T09:21:00Z</published><updated>2012-04-07T09:21:00Z</updated><author><name>mapserver</name><uri>http://www.cnblogs.com/mapserver/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mapserver/archive/2012/04/07/2436286.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mapserver/archive/2012/04/07/2436286.html"/><content type="html">&lt;p&gt;MicroOrm.Net主页：&lt;/p&gt;&lt;p&gt;&lt;a href="http://code.google.com/p/micro-orm-net/"&gt;http://code.google.com/p/micro-orm-net/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;MicroOrm.Net系列随便目录总览：&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html"&gt;http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;在传统的orm中，我们操作Table的时候，必须先有Model的定义，但是在MicroOrm.Net中，我们可以不定义Model，来直接操作Table。&lt;/p&gt;&lt;p&gt;假如我们在db中有OrderDetail这样一张表：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;CREATE TABLE [dbo].[OrderDetail](&lt;br/&gt;[OrderDetailId] [nvarchar](50) NOT NULL,&lt;br/&gt;[OrderId] [nvarchar](50) NULL,&lt;br/&gt;[ProductId] [nvarchar](50) NULL,&lt;br/&gt;[Qty] [int] NULL,&lt;br/&gt;CONSTRAINT [PK_OrderDetail] PRIMARY KEY CLUSTERED &lt;br/&gt;(&lt;br/&gt;[OrderDetailId] ASC&lt;br/&gt;)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]&lt;br/&gt;) ON [PRIMARY]&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;在你的项目中引用MicroOrm.Net，修改项目的config文件，配置db的链接字符串：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&amp;lt;connectionStrings&amp;gt;&lt;br/&gt;    &amp;lt;add name="db" connectionString="..."  providerName="System.Data.SqlClient"/&amp;gt;&lt;br/&gt;&amp;lt;/connectionStrings&amp;gt;&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;编写下面代码：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;var db = Database.Open("db");&lt;br/&gt;var od = db.OrderDetail.Query()&lt;br/&gt;        .First();&lt;br/&gt;string orderId = od.OrderId;&lt;br/&gt;string productId = od.ProductId;&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;我们来分析下上面代码：&lt;/p&gt;&lt;p&gt;var db = Database.Open("db"); &amp;nbsp; 我们创建了一个db对象，此对象为DynamicObject。&lt;/p&gt;&lt;p&gt;var od = db.OrderDetail.Query().First(); &amp;nbsp;因为db对象是一个DynamicObject，所以它的OrderDetail属性，在运行的时候，才会被解析并且和数据库里的OrderDetail表自动产生关联，Query方法是我们查询的一个基准方法，最后再返回表里的第一行记录。&lt;/p&gt;&lt;p&gt;string orderId = od.OrderId; 因为od也是DynamicObject，它的OrderId属性，也是在运行时来解析的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;当然如果你定义了Model，那么也能轻松的把DynamicObject转换为Model强类型对象：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;public class OrderDetail &lt;br/&gt;{&lt;br/&gt;        public string OrderDetailId { get; set; }&lt;br/&gt;        public string OrderId { get; set; }&lt;br/&gt;        public string ProductId { get; set; }&lt;br/&gt;        public int Qty { get; set; }&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;// 方式1&lt;br/&gt;OrderDetail od = db.OrderDetail.Query()&lt;br/&gt;        .First()&lt;br/&gt;　 　.To&amp;lt;OrderDetail&amp;gt;();&lt;br/&gt;&lt;br/&gt;// 方式2&lt;br/&gt;od = db.OrderDetail.Query()&lt;br/&gt;    .First&amp;lt;OrderDetail&amp;gt;();&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;至此我们一个简单的Demo就完成了，我们没有定义Model，没有Model-Table Mapping，Orm也可以这么简单。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mapserver/aggbug/2436286.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/07/2436286.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html</id><title type="text">MicroOrm.Net（1） 总览</title><summary type="text">一直对orm情有独钟，在开发的过程中也用过很多的orm产品，他们的确给我们带来了很多方便，同时也给我们带来了很多的麻烦：1、需要定义Model很烦，不管是先有Table，再生成Model代码；还是先定义Model代码，再反向生成Table。2、关联查询复杂，虽然可以设置抓取规则，但是还是很复杂。3、对持久上下文（ObjectContext[EF]、Session[NHibernate]）很不喜欢，当然也有很多人非常喜欢这个东西。基于上面的原因，就产生了MicroOrm.Net，目前也有一些开源的微型orm产品，在此也不会和这些产品进行对比。主页：http://code.google.com/p</summary><published>2012-04-07T08:28:00Z</published><updated>2012-04-07T08:28:00Z</updated><author><name>mapserver</name><uri>http://www.cnblogs.com/mapserver/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html"/><content type="html">&lt;p&gt;一直对orm情有独钟，在开发的过程中也用过很多的orm产品，他们的确给我们带来了很多方便，同时也给我们带来了很多的麻烦：&lt;/p&gt;&lt;p&gt;1、需要定义Model很烦，不管是先有Table，再生成Model代码；还是先定义Model代码，再反向生成Table。&lt;/p&gt;&lt;p&gt;2、关联查询复杂，虽然可以设置抓取规则，但是还是很复杂。&lt;/p&gt;&lt;p&gt;3、对持久上下文（ObjectContext[EF]、Session[NHibernate]）很不喜欢，当然也有很多人非常喜欢这个东西。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;基于上面的原因，就产生了MicroOrm.Net，目前也有一些开源的微型orm产品，在此也不会和这些产品进行对比。&lt;/p&gt;&lt;p&gt;主页：&lt;a href="http://code.google.com/p/micro-orm-net/"&gt;http://code.google.com/p/micro-orm-net/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;特点：&lt;/p&gt;&lt;p&gt;Dynamic &amp;amp; lightweight：基于.Net 4.0开发，里面大量使用了DynamicObject。&lt;br /&gt;Non-strongly typed result support：返回值可以是DynamicObject，也就是动态对象。&lt;br /&gt;Strongly typed result support：返回值也可以是Model强类型。&lt;br /&gt;Multiple database support(currently only support sql server)：目前只支持sql server，现在我们正在使用，接受项目考验，打算等到1.0正式版本发布后，再支持mysql、oracle&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;下面是文章列表：&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html"&gt;MicroOrm.Net（1） 总览&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/07/2436286.html"&gt;MicroOrm.Net（2） 基础及动态特性&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/08/2437602.html"&gt;MicroOrm.Net（3） Database、Table、Column、Expression、Math&amp;amp;MathE&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/08/2437666.html"&gt;MicroOrm.Net（4） Table.Query() - Where&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/11/2442749.html"&gt;MicroOrm.Net（5） Table.Query() - Select&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/11/2443015.html"&gt;MicroOrm.Net（6） Table.Query() - Join &amp;amp; Order By&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/11/2443199.html"&gt;MicroOrm.Net（7） Table.Query() -&amp;nbsp;Group By &amp;amp; Having&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/11/2443215.html"&gt;MicroOrm.Net（8） Table.Query() -&amp;nbsp;Distinct、Skip &amp;amp; Take&lt;/a&gt;&lt;/p&gt;&lt;p&gt;MicroOrm.Net（9） Insert&lt;/p&gt;&lt;p&gt;MicroOrm.Net（10） Update&lt;/p&gt;&lt;p&gt;MicroOrm.Net（11） Delete&lt;/p&gt;&lt;p&gt;MicroOrm.Net（12）&amp;nbsp;TransactionScope &amp;amp; CodeScope&lt;/p&gt;&lt;p&gt;MicroOrm.Net（13） 再议Table.Query() - Where&lt;/p&gt;&lt;p&gt;MicroOrm.Net（14）&amp;nbsp;Roadmap&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/12/2443974.html"&gt;MicroOrm.Net和现有ORM产品的对比&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;最后一点：很多开发人员在使用一个东西的时候，都会问有没有什么大公司在使用，以此来寻求信心。目前MicroOrm.Net只有我自己项目在使用，如果你怕就不要使用了；如果你不怕，在使用的过程中MicroOrm.Net出现了什么Bug，或者合理的需求，我将会尽力帮你解决。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mapserver/aggbug/2436129.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mapserver/archive/2006/07/11/447601.html</id><title type="text">Asp.net服务器控件编程（6） ViewState（二）——ViewState用法和IStateManager</title><summary type="text">本系列的第三章我们了解了ViewState的基础知识，也大概的了解了Aspx页面的生命周期，今天继续讲解ViewState的Asp.net服务器控件中的使用和复杂的ViewState管理。 ViewState的简单使用我们只要举个简单的例子即可：usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Web.UI.WebControls;namespaceClassLibrary1{publicclassClass1:WebControl{privatestring_sex;publicstringSe.</summary><published>2006-07-10T16:11:00Z</published><updated>2006-07-10T16:11:00Z</updated><author><name>mapserver</name><uri>http://www.cnblogs.com/mapserver/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mapserver/archive/2006/07/11/447601.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mapserver/archive/2006/07/11/447601.html"/><content type="text">本系列的第三章我们了解了ViewState的基础知识，也大概的了解了Aspx页面的生命周期，今天继续讲解ViewState的Asp.net服务器控件中的使用和复杂的ViewState管理。 ViewState的简单使用我们只要举个简单的例子即可：usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Web.UI.WebControls;namespaceClassLibrary1{publicclassClass1:WebControl{privatestring_sex;publicstringSe.</content></entry></feed>
