1. 程式人生 > >Moon.Orm 常見查詢例項

Moon.Orm 常見查詢例項

一、Moon.Orm框架總述 (您還用hibernate?實體框架?)

1.框架名:Moon 意思是月亮,而非Mono.因為很喜歡明月,所以以此為名.它是一個.NET下的Orm框架.

2.發展歷史:歷經近乎三年的發展歷程,起因是EF框架的起初效能原因,為專案實戰而生.

3.專案經驗:經過數家公司專案實戰、以及眾多使用者的肯定.

qq群:225656797 

Moon.Orm的追求方向:

1)高效能.
這也是架構建立的目的之一,已經將它的效能提升到了極致.大家可以自己測試.我可以說其效能是數一數二的.
連線地址:Moon洗冤錄
2)易用性強
我想,用過Moon.ORM的應該可以知道這點.配置簡單,智慧感知,程式碼生成器的輔助,會sql就可使用之.
3)多資料庫多資料來源支援
在同一個專案中我們常常需要處理這些情況時.目前moon的目標,支援sqlserver sqlite oracle mysql postgreSQL db2

如果您需要換資料庫:直接修改配置檔案然後一鍵生成實體層即可;

如果您需要多資料庫:直接新增配置檔案即可.詳情:Moon使用配置說明

4)智慧感知

這個不用講了,值得一提的是MQL,她能夠為你提供強大的智慧感知功能,並且無資料庫型別差異.

5).NET 2.0原生支援.

有人問:為什麼沒有LINQ、lambda,其實我只想說:沒有必要做這些了,因為微軟一個團隊在做實體框架,去做一些不必要的事情,

真的沒有意思. 覺得MQL複雜的兄弟們,有了智慧感知,你們就適應適應,因為這是蘿蔔白菜的問題.

6) 使用便捷.

二、Moon.Orm的功能預覽

2.MQL查詢分類講解

2.1 MQL的標準查詢

var mm=ClassSet.Select(ClassSet.ClassID,ClassSet.ClassName).

Where(ClassSet.ClassName.Contains("s").And(ClassSet.ClassID.BiggerThan(9)));

SELECT [Class].[ClassID],[Class].[ClassName] FROM [Class] WHERE [Class].[ClassName] LIKE @p1  AND  [Class].[ClassID]>@p2
@p1=%s%
@p2=9

2.2 MQL的巢狀查詢(含有Top查詢:支援mysql、oracle、postgreSQL、sqlserver、sqlite)

var qiantao=ScoreSet.SelectAll().Where(
                    ScoreSet.UserID.In(UserSet.Select(UserSet.UserID).Where(
                        UserSet.ClassID.In(
                        ClassSet.Select(ClassSet.ClassID).Where(
                                ClassSet.ClassName.Equal(c.ClassName).And(ClassSet.ClassID.BiggerThan(0))
                            )
                        )
                    )
                  ) 
                ).Top(1);   SELECT TOP 1 [Score].* FROM [Score] WHERE [Score].[UserID] IN (SELECT [User].[UserID] FROM [User] WHERE [User].[ClassID] IN (SELECT [Class].[ClassID] FROM [Class] WHERE [Class].[ClassName][email protected]  AND  [Class].[ClassID]>@p2 ) )
@p1=綜合測試ClassName2
@p2=0

2.3 MQL的分組查詢

var mql=ScoreSet.Select(ScoreSet.ScoreM.Sum().AS("sum"),ScoreSet.TypeName).

Where(ScoreSet.ScoreM.BiggerThanOrEqual(100)).

GroupBy(ScoreSet.TypeName).

Having(ScoreSet.ScoreM.Sum().BiggerThan(300));

SELECT SUM([Score].[ScoreM]) AS 'sum',[Score].[TypeName] FROM [Score] WHERE  [Score].[ScoreM]>[email protected]  GROUP BY [Score].[TypeName]  HAVING  SUM([Score].[ScoreM])>@p2
@p1=100
@p2=300

2.4 MQL的連線查詢

var m1=ClassSet.Select(ClassSet.ClassID,ClassSet.ClassName)
                    .LeftJoin(
                    UserSet.Select(UserSet.UserID))
                    .ON(ClassSet.ClassID.Equal(UserSet.UserID))
                    .Where(UserSet.UserID.BiggerThan(9)); SELECT [Class].[ClassID],[Class].[ClassName],[User].[UserID] FROM [Class] LEFT JOIN [User] ON [Class].[ClassID]=[User].[UserID]  WHERE  [User].[UserID]>@p1
@p1=9

2.5 MQL的Union查詢

var mql=ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(1))
                    .Union(ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(2)));   var mql=ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(1))
                    .UnionAll(ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(2))); SELECT [Class].* FROM [Class] WHERE  [Class].[ClassID]>@p1  UNION  SELECT [Class].* FROM [Class] WHERE  [Class].[ClassID]>@p2
@p1=1
@p2=2 SELECT [Class].* FROM [Class] WHERE  [Class].[ClassID]>@p1  UNION ALL SELECT [Class].* FROM [Class] WHERE  [Class].[ClassID]>@p2
@p1=1
@p2=2

3.MQL查詢結果預覽

public static void Main(string[] args)
        {
            
            using (var db=Db.CreateDefaultDb()) {
                db.TransactionEnabled=true;
                db.DebugEnabled=true;
                Console.WriteLine("---------------巢狀查詢---------------------");
                var qiantao=ScoreSet.SelectAll().Where(
                    ScoreSet.UserID.In(UserSet.Select(UserSet.UserID).Where(
                        UserSet.ClassID.In(
                        ClassSet.Select(ClassSet.ClassID).Where(
                                ClassSet.ClassName.Equal(c.ClassName).And(ClassSet.ClassID.BiggerThan(0))
                            )
                        )
                    )
                  ) 
                ).Top(1);
               
                Console.WriteLine("---------------分組查詢---------------------");
                var mql=ScoreSet.Select(ScoreSet.ScoreM.Sum().AS("sum"),ScoreSet.TypeName).Where(ScoreSet.ScoreM.BiggerThanOrEqual(100)).GroupBy(ScoreSet.TypeName).Having(ScoreSet.ScoreM.Sum().BiggerThan(300));
              
                Console.WriteLine("---------------連線查詢---------------------");
                var m1=ClassSet.Select(ClassSet.ClassID,ClassSet.ClassName)
                    .LeftJoin(
                    UserSet.Select(UserSet.UserID))
                    .ON(ClassSet.ClassID.Equal(UserSet.UserID))
                    .Where(UserSet.UserID.BiggerThan(9));

            }
            Console.WriteLine("---------------Union測試---------------------");
            using (var db=Db.CreateDefaultDb()) {
                db.TransactionEnabled=true;
                db.DebugEnabled=true;
                
                var mql=ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(1))
                    .Union(ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(2))); 

            }
        }  

三、Moon.Orm的開源釋出

1)Moon.Orm 5.0之前的版本以(LGPL)開源釋出

2)之後的版本步步開源,對於參與者提供原始碼.

如果您參與Moon.Orm的核心開發或輔助平臺開發,您將直接獲得5.0的原始碼,有意者聯絡:[email protected]

當然您可以資金支援.十塊錢那也是支援,請註明,您的郵箱地址.

5.0框架下載:http://www.cnblogs.com/humble/p/3298594.html

四、Moon.Orm的技術文件

 如果您喜歡它,請推薦支援一下吧:)

 待續