posts - 27, comments - 207, trackbacks - 25, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

NQL.NET 数据库对象查询语言简介 2

Posted on 2006-10-29 12:30 风云 阅读(1866) 评论(22)  编辑 收藏 所属分类: .NETNDO

      17. 比DataSet更简单的分页操作,并且性能也大大增强了,CurrentPageIndex = 1,PageSize = 5

this.dataGrid1.DataSource = new Query("Customers")
                .Where(Ex.Like(
"ContactTitle","Sales%"))
                .GetDataTable(
1,5);

SQL  输出

SELECT TOP 5 *  FROM ( SELECT  * 
FROM Customers 
WHERE [ContactTitle]  LIKE @ContactTitle ) AS TMP 
WHERE TMP.CustomerID > (SELECT MAX(TMP3.CustomerID) FROM ( SELECT TOP 5 TMP2.CustomerID FROM ( SELECT  * 
FROM Customers 
WHERE [ContactTitle]  LIKE @ContactTitle ) AS TMP2 ORDER BY TMP2.CustomerID ASCAS TMP3) ORDER BY TMP.CustomerID ASC

18。在计算列上可以进行+,-,*,/,%,++,--操作,在条件表达式上不仅可以进行算术运算而且可以进行逻辑运算 &&,||,! 以及进行比较运算==,!=,>,>=,<,<=,还可以进行范围运算%,in,between等运算

18.1 算术运算和比较运算

Query q = new Query("Products");
 Condition con 
= q.NewCondition("UnitPrice"* q.NewCondition("UnitsInStock"<=1000;
 
this.dataGrid1.DataSource = con.GetDataTable();

SQL  输出

SELECT  * 
FROM Products 
WHERE 
    
[UnitPrice] * [UnitsInStock] <= @UnitPrice

18.2 逻辑and 和范围Between

Query q = new Query("Products");
 ICondition con 
= q.NewCondition("UnitPrice"* q.NewCondition("UnitsInStock"<= 1000 
                
&& q.NewCondition("SupplierID").Between(1,5);
this.dataGrid1.DataSource = con.GetDataTable();

SQL  输出

SELECT  * 
FROM Products 
WHERE 
    
[UnitPrice] * [UnitsInStock] <= @UnitPrice
    
AND [SupplierID] BETWEEN @SupplierID AND @_Another_SupplierID

18.3 模糊查询%

Query q = new Query("Customers");
 
this.dataGrid1.DataSource = q.Where(q.NewCondition("ContactTitle"% "Sales%").GetDataTable();

SQL  输出

SELECT  * 
FROM Customers 
WHERE 
    
[ContactTitle] LIKE @ContactTitle

18.4 范围运算IN

Query qryCustomer = new Query("Customers")
                ._(
"CustomerID")
                .Where(
"ContactTitle","Owner");

Query qryOrder 
= new Query("Orders");
qryOrder.Where(    qryOrder.NewCondition(
"ShipVia"== 1 && qryOrder.NewCondition("CustomerID").In(qryCustomer));
 
this.dataGrid1.DataSource = qryOrder.GetDataTable();

SQL  输出

SELECT  * 
FROM Orders 
WHERE 
    
[ShipVia] = @ShipVia
    
AND [CustomerID] IN (SELECT 
                                                        
[CustomerID]
                             
FROM Customers 
                             
WHERE [ContactTitle]  = @ContactTitle )

18.5 复杂一点的条件

Query q = new Query("Products");
 Condition con 
= q.NewCondition("UnitPrice">= 50 
                
&& (
                            q.NewCondition("UnitsInStock ") <= 20 
                          
|| q.NewCondition("UnitsOnOrder"> 0
                           )
                
&& q.NewCondition("ProductID") >6;

this.dataGrid1.DataSource = q.Where(con).GetDataTable();

SQL  输出

SELECT  * 
FROM Products 
WHERE 
    
[UnitPrice] >= @UnitPrice
    
AND (
        
[UnitsInStock ] <= @UnitsInStock  OR [UnitsOnOrder] > @UnitsOnOrder
    ) 
    
AND [ProductID] > @ProductID

19 . 查询表达式另一种写法 算术运算 Add(+),Minus(-),Multiply(*),Divide(/),Mode (%),逻辑运算and,or,not

比较运算GreatThan(>,GT),GreaterEquals(>=,GE),Equal(==,EQ),LessEquals(<=,LE),Little(<,LT),NotEquals(!=,NE)

IsNull,IsNotNull,IgnoreCase(忽略大小写)等运算

Query q = new Query("Products");
Condition con 
= q.NewCondition("UnitPrice").GreaterEquals(50)
                .And
                  (
                         q.NewCondition(
"UnitsInStock ").LessEquals(20)
                         .Or
                              (
                                  q.NewCondition(
"UnitsOnOrder").GreaterThan(0)
                              )
                )
                .And(q.NewCondition(
"ProductID").GT(6));
            
this.dataGrid1.DataSource = q.Where(con).GetDataTable();

SQL  输出

SELECT  * 
FROM Products 
WHERE 
    
[UnitPrice] >= @UnitPrice
    
AND (
        
[UnitsInStock ] <= @UnitsInStock  OR [UnitsOnOrder] > @UnitsOnOrder
    ) 
    
AND [ProductID] > @ProductID

20. Case When 语句的用法

Query q = new Query("Orders");
 
this.dataGrid1.DataSource = q.Select("OrderID",
                      "ShipCountry",
                    q.Case(
"ShipCountry")
                        .When(
"France").Then("fc")
                        .When(
"USA").Then("us")
                        .When(
"German").Then("gm")
                        .Else(
"com")
                        .End().As(
"SC"),
                    
"OrderDate")
                .GetDataTable();

SQL  输出

SELECT 
    
[OrderID],
    
[ShipCountry],
    
CASE [ShipCountry]
        
WHEN 'France' THEN 'fc'
        
WHEN 'USA' THEN 'us'
        
WHEN 'German' THEN 'gm'
        
ELSE 'com'
        
END AS SC,
    
[OrderDate]
FROM Orders 

21 统计函数(Count,Avg,Max,Min,Sum)的用法

21.1 Count

Query q = new Query("Products").Count("ProductID");
            Condition con 
= q.NewCondition("UnitPrice"* q.NewCondition("UnitsInStock"<=1000;
            
this.richTextBox1.Text = con.GetScalar().ToString();

SQL  输出

SELECT 
    
COUNT([Products].[ProductID])
FROM Products 
WHERE 
    
[UnitPrice] * [UnitsInStock] <= @UnitPrice

21.2 Avg,其它的Max,Min,Sum用法一样

Query q = new Query("Products").Avg("ProductID");
            Condition con 
= q.NewCondition("UnitPrice"* q.NewCondition("UnitsInStock"<=1000;
            
this.richTextBox1.Text = con.GetScalar().ToString();

SQL 输出

SELECT 
    
AVG([Products].[ProductID])
FROM Products 
WHERE 
    
[UnitPrice] * [UnitsInStock] <= @UnitPrice

22 GroupBy的用法

Query q = new Query("Orders")
                .Select(
"ShipVia","ShipRegion")
                .GroupBy(
"ShipVia","ShipRegion");
            
this.dataGrid1.DataSource = q.GetDataTable();

SQL  输出

SELECT 
    
[ShipVia],
    
[ShipRegion]
FROM Orders 
 
GROUP BY ShipVia,ShipRegion

 

上一篇  下一篇

Feedback

#1楼    回复  引用  查看    

2006-10-29 14:47 by 曲滨      
SQL SERVER 没有唯一主键
的如何分页?

#2楼 [楼主]   回复  引用  查看    

2006-10-29 15:21 by 风云      
只要有一个标记列是唯一的就可以

#3楼    回复  引用    

2006-10-29 19:31 by islands[匿名] [未注册用户]
不错,可以收藏吗?

#4楼    回复  引用    

2006-10-29 22:29 by 匿名 [未注册用户]
厉害!!!!!!!!!!!!!!!!!!
佩服!!!!!!!!!!!!!!!!
这是不是开源的呀?源代码什么时候上传上来呢?.net1.0的还是.net2.0的呢?
想学习一下,更利于中国软件业的发展哈,技术不能守保呀

#5楼 [楼主]   回复  引用  查看    

2006-10-30 09:10 by 风云      
我最近要和开源组织进行沟通一下,看看开源程序要走哪些环节,把手续办完后,我会把源代码发布到开源网站上,供大家下载的!

#6楼    回复  引用    

2006-10-30 09:23 by ^_^ [未注册用户]
不错.


借宝地做个广告
http://www.carva.net/
中国车载影音网

#7楼    回复  引用    

2006-11-22 13:40 by 匿名 [未注册用户]
强!

#8楼    回复  引用    

2006-11-25 15:13 by 虫虫[匿名] [未注册用户]
功能越来越强了,学习!

#9楼 [楼主]   回复  引用  查看    

2006-11-27 11:07 by 风云      
ndo 是基于.net 1.1 的,不过.NET 2.0 仍然可以用的

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  博客园首页

  新闻频道

  社区

  小组

  博问

  网摘

  闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-11-22 14:52 编辑过
成果网帮您增加网站收入


相关链接: