blog

オームのもう一つのデザインスタイルを評価する:シンプルへの道

sql本来のプログラミングを理解していますか?もし面倒だと感じたら、Ormの設計スタイル:シンプルへの道をご覧ください!...

Jun 23, 2025 · 10 min. read
シェア

I. SQLとストアドプロシージャの使用

1) List<Dictionary<string, MObject>> の使用

1.sqlを使用し、本来の感覚を体験してください。

string sql="select * from Class where ClassName = @";  
string sql2="select * from Class where DateTimem = @";  
List<Dictionary<string, MObject>> mylist=db.ExecuteSqlToDictionaryList(sql,"boy'");  
List<Dictionary<string, MObject>> mylist2=db.ExecuteSqlToDictionaryList(sql2,DateTime.Parse("2013-10-10 14:40:08"));  
foreach(var oneClass in mylist){  
                    string className=oneClass["className"].To<string>();  
                    long id=oneClass["Classid"].To<long>();  
                    DateTime datetimem=oneClass["datetimem"].To<DateTime>();//大文字と小文字を区別しない  
                    Console.WriteLine(className+"  "+id+"  "+datetimem);  
} 

2.mqlの使用、理性的な認識は優雅な経験をもたらします

var  list=db.GetDictionaryList(ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(0))) 

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の入れ子クエリ

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]=@p1  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]>=@p1  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のユニオン・クエリー

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 

2.6 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)));   
            }  
        } 

3) データセットの使用

1.ストアドプロシージャの使用

DataSet dataset=db.ExecuteProToDataSet("プロシージャ名",パラメータ1,パラメータ2); 

2.sqlの使用

DataSet dataset=db.ExecuteSqlToDataSet(sql,"boy"); 



3.mqlの使用

DataSet dataset=db.GetDataSet(ClassSet.SelectAll().Where(ClassSet.ClassID.BiggerThan(0))); 

4) xmlを使用したSQLクエリの設定

1.コンフィグノードの設定

<appSettings> 
<add key="SQL_XML_FILE_NAME" value="C:\Moon\Moon.Orm\sql.xml"></add>//フルパスでない場合、デフォルトはdll生成ディレクトリにある。  
</appSettings> 

2.構成 xml (sql.xml)

<?xml version="1.0"?> 
<sqls> 
<sqlxml id="getname"> 
<sql>select name from user where id>@</Sql> 
<description>ユーザー名を照会る</Description> 
</sqlxml> 
</sqls> 

3.クエリにidを使用

var list=db.GetDictionaryList(XmlHelper.GetSqlXmlByID("getname"),"boy"); 

5) キング・オブ・SQLの帰還

GetDynamicList を使用して、別の種類の自由を体験してください!

object, .net 4.0以下では、dynamicを使って直接値を取り出すことができる。.  
string sql22="select * from Score";  
dynamic list22=db.GetDynamicList(sql22,"Score");  
foreach(var a in list22){  
Console.WriteLine(a.ID+"--"+a.ScoreM+"--"+a.UserID+"--"+a.TypeName);//すべて強い型である  
} 

経験豊富なストロングタイプはこちら)

Read next

アンドロイドSDKカタログの詳しい説明と役割

Android SDk ツールソフトウェア開発キット。ソフトウェア開発エンジニアが特定のソフトウェアパッケージ、ソフトウェアフレームワーク、ハードウェアプラットフォーム、オペレーティングシステムなどのアプリケーションを構築するために使用する開発ツールのコレクション。\n

Jun 23, 2025 · 2 min read