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

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

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

SQL  输出

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

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

18.1 算术运算和比较运算

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

SQL  输出

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

18.2 逻辑and 和范围Between

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

SQL  输出

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

18.3 模糊查询%

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

SQL  输出

None.gif SELECT    *  
None.gif
FROM  Customers 
None.gif
WHERE  
None.gif    
[ ContactTitle ]   LIKE  @ContactTitle

18.4 范围运算IN

None.gif Query qryCustomer  =   new  Query( " Customers " )
None.gif                ._(
" CustomerID " )
None.gif                .Where(
" ContactTitle " , " Owner " );
None.gif
None.gifQuery qryOrder 
=   new  Query( " Orders " );
None.gifqryOrder.Where(    qryOrder.NewCondition(
" ShipVia " ==   1   &&  qryOrder.NewCondition( " CustomerID " ).In(qryCustomer));
None.gif 
this .dataGrid1.DataSource  =  qryOrder.GetDataTable();

SQL  输出

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

18.5 复杂一点的条件

None.gif Query q  =   new  Query( " Products " );
None.gif Condition con 
=  q.NewCondition( " UnitPrice " >=  50  
None.gif                
&&  (
                            q.NewCondition( " UnitsInStock  " )  <=  20  
None.gif                          
||  q.NewCondition( " UnitsOnOrder " >   0
                             )
None.gif                
&&  q.NewCondition( " ProductID " )  > 6 ;
None.gif
None.gif
this .dataGrid1.DataSource  =  q.Where(con).GetDataTable();

SQL  输出

None.gif SELECT    *  
None.gif
FROM  Products 
None.gif
WHERE  
None.gif    
[ UnitPrice ]   >=  @UnitPrice
None.gif    
AND  (
None.gif        
[ UnitsInStock  ]   <=  @UnitsInStock   OR   [ UnitsOnOrder ]   >  @UnitsOnOrder
None.gif    ) 
None.gif    
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(忽略大小写)等运算

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

SQL  输出

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

20. Case When 语句的用法

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

SQL  输出

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

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

21.1 Count

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

SQL  输出

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

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

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

SQL 输出

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

22 GroupBy的用法

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

SQL  输出

None.gif SELECT  
None.gif    
[ ShipVia ] ,
None.gif    
[ ShipRegion ]
None.gif
FROM  Orders 
None.gif 
GROUP   BY  ShipVia,ShipRegion

 

上一篇  下一篇

a. 首先,要证明(Rq·)是(F*q,·)的子群,需要满足以下三个条件: 1. 封闭性:对于任意的a,b∈Rq,a·b也属于Rq,因此(Rq·)是封闭的。 2. 结合律:对于任意的a,b,c∈Rq,有(a·b)·c = a·(b·c),因此(Rq·)满足结合律。 3. 单位元素:对于任意的a∈Rq,有a·1 = a,因此1是(Rq·)的单位元素。 综上所述,(Rq·)是(F*q,·)的子群。 b. 若Nq=空集,表示在Fq中不存在非零的平方根。根据二次剩余的定义可知,当且仅当q是偶数时,-1在Fq中是二次剩余。因此,当q是偶数时,Fq中存在非零元素a,使得a^2=-1,即Fq中存在平方根。而当q是奇数时,-1在Fq中是非二次剩余,因此不存在非零的平方根。 c. 根据二次剩余的定义可知,如果p是奇素数且a是p的二次剩余,那么a^(p-1)/2 ≡ 1 (mod p)。因此,当q是奇数时,-1在Fq中是非二次剩余,因此有(Rq·)中的元素a,使得a^2=-1,满足a^q-1= (a^2)^(q-1)/2 = (-1)^(q-1)/2 = -1。因此|Rq| = q^2-1 = (q-1)(q+1) = |F*q|。 d. 将二次方程x^2-x-1=0化为模29意义下的方程,得到x^2-x-1≡0 (mod 29)。通过求解可得x≡15或x≡14 (mod 29)。因此,Fibonacci数列在F29中的通项公式为an≡15Fn-1+14Fn-2 (mod 29),其中Fn表示第n个斐波那契数。 e. 斐波那契数列在模29意义下是一个有限的循环序列。为了找到这个序列的周期,可以从前往后计算斐波那契数列,直到出现重复的数。在F29中,斐波那契数列的周期长度为28,计算方法如下: F0 = 0,F1 = 1; for i = 2 to 28: Fi = (Fi-1 + Fi-2) mod 29; 得到的序列为0, 1, 1, 2, 3, 5, 8, 13, 21, 7, 28, 6, 4, 10, 14, 24, 13, 8, 21, 6, 27, 4, 1, 5, 6, 11, 17, 28, 16。因此,周期长度为28。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值