【LINQ2Dapper】最も完全なDapperのにLINQのフレームワーク(6)匿名型と---マルチテーブル関節リターン

ディレクトリ

 

1.マルチテーブル関節問い合わせ

デフォルトでは、GET、ToListメソッド、PageList他の機能は、単一テーブルの動作をサポートし、

として

var注釈= conn.QuerySet <コメント>()
                     .Where(X => x.Id.NotIn(新しいINT [] {1、2、3}) 
                     && x.SubTime.AddMinutes(50)<DateTime.Now.AddDays(-1) 
                     && x.Type.IsNotNull())
                     .ToList()。 

3.1.2同時デュアル3つのテーブルとテーブルマッピング操作、マッピングテーブル関数から指定し、

として

 var注釈= conn.QuerySet <コメント>()
                    .From <コメント、ニュース、ResourceMapping>()
                    .Where((A、B、C)=> a.Id == 1 
                    && b.Headlines.IsNotNull() 
                    && c.RSize> 100)。

)(かもしれGetQuerySetによりベースクエリセットオブジェクトを返します。

var注釈= conn.QuerySet <コメント>()
                    .From <コメント、ニュース、ResourceMapping>()
                    .Where((A、B、C)=> a.Id == 1 
                    && b.Headlines.IsNotNull() 
                    && c.RSize> 100)
                    .GetQuerySet()
                    .ToList()。

自分の拡充を通じて達成することができ、関節のテーブルのためのより多くの需要がある場合、これらは、3つのテーブル共同問い合わせされています、

として

    /// <要約>
    /// 4つのテーブルによって拡張ジョイントを定義
    /// </要約>
    /// <typeparam名= "T">一般的なクエリセット</ typeparam>に対応
    /// <typeparam名= "T1は"> </ typeparam>一般的な1を拡張しました
    /// <typeparam名= "T2">一般的な拡張子2 </ typeparam>
    /// <typeparam名= "T3は"> </ typeparam>ジェネリック3を拡張しました
    /// <typeparam名= "T4は"> </ typeparam>一般的な4拡張しました
    パブリッククラスtestFrom <T、T1、T2、T3、T4>:ISelect <T>
    {
        公共testFrom(クエリセット<T>クエリセット):塩基(クエリセット)
        {
 
        }
        //定義する場所
        公共testFrom <T、T1、T2、T3、T4>ここで、(式<のFunc <T1、T2、T3、T4、BOOL >>選択)
        {
            base.Where(選択)。
            これを返します。
        }
        // ToListメソッドを定義します
        公共のIEnumerable <TReturn> ToListメソッド<TReturn>(式<のFunc <T1、T2、T3、T4、TReturn >>選択)
        {
            base.ToList <TReturn>(選択)を返します。
        }
    }

  そして、拡張したクラスを使用して

                //最初のクエリセットを宣言します
                VARクエリセット= conn.QuerySet <コメント>();
                / *拡張クラスで定義されたクエリセットのインスタンスに入れ
              (注:Tはコメントとして一般的なクエリセットに対応しなければならない第一のタイプ)/ *
                VARリスト=新しいtestFrom <コメント、コメント、ニュース、ResourceMapping、LikeRecord>(クエリセット)
                    .Where((A、B、C、D)=> a.Id == 1 
                    && b.NewsLabel.Contains( "T"))
                    .GetQuerySet()
                    .ToList()。

  

ように、関連するテーブルの任意の数に拡張することができます

以下は、サポート機能です

パブリッククラスISelect <T>
    {
        公共ISelect(クエリセット<T>クエリセット)。
 
        公共TReturnのGet <TReturn>(LambdaExpression EXP)。
        パブリッククエリセット<T> GetQuerySet();
        公共ISelect <T>のOrderBy <TProperty>(式<のFunc <TProperty、オブジェクト>>フィールド);
        公共ISelect <T> OrderByDescing <TProperty>(式<のFunc <TProperty、オブジェクト>>フィールド);
        公共PageList <TReturn> PageList <TReturn>(int型pageIndexパラメータ、int型のpageSize、LambdaExpression EXP)。
        公共のIEnumerable <TReturn> ToListメソッド<TReturn>(LambdaExpression EXP)。
        公共クエリセット<T>(LambdaExpressionの式)。
    }

  

2.結果は、匿名型を返します

3.12バージョンは匿名の戻り値の型をサポートした後、

として

  var注釈= conn.QuerySet <コメント>()
                    .Where(X => x.Content == "TEST1" && x.Content.Contains( "T"))
                    .get(X =>新しいです
                    {
                        ID = 123、
                        情報でarticleID = x.ArticleId
                    });

いくつかの複雑なフィールドが戻ると、SQLによって達成することができます

例えば

var注釈= conn.QuerySet <コメント>()
                    .Join <コメント、ニュース>((A、B)=> a.ArticleId == b.Id)
                    .Where(X => x.Content == "TEST1" && x.Content.Contains( "T"))
                    .Where <コメント、ニュース>((A、B)=> a.SubTime <DateTime.Now.AddDays(-5)&& a.Id> a.Id%1)
                    .get(X =>新しいです
                    {
                        、カウント= Convert.ToInt32( "(Comment_4からのカウント(1)を選択)")
                        AAA = "6666"、
                    });

そしてまた、共同調査のリターンをサポートしています

var注釈= conn.QuerySet <コメント>()
                     .Join <コメント、ニュース>((A、B)=> a.ArticleId == b.Id)
                     .Join <コメント、ResourceMapping>((A、B)=> a.Id == b.FKId)
                     .Where(X => x.Content == "試験")
                     .From <コメント、ニュース、ResourceMapping>()
                     .OrderBy <ニュース>(X => x.Id)
                     .Where((A、B、C)=> a.ArticleId == b.Id)
                     .PageList(1、10、(A、B、C)=>新しいです
                     {
                         ID = a.Id、
                         名前= b.NewsLabel、
                         リソース= c.RPath、
                         ROWNUM = Convert.ToInt32( "ROW_NUMBER()OVER(ORDER BY Comment.Id)")、
                         NewsLable = "News.NewsLabel"
                     });

また、より複雑なサブクエリをサポートしています

サブクエリのサポート機能がカウントされている()合計<T>(フィールド)

例えば

VARコメント1 = conn.QuerySet <コメント>()
                    .Join <コメント、ニュース>((A、B)=> a.ArticleId == b.Id)
                    .Where(X => x.Id.Between(80、100) 
                    && x.SubTime.AddDays(-10)<DateTime.Now && x.Id> 10)
                    .From <コメント、ニュース>()
                    .get((A、B)=>新しいです
                    {
                        //(データベースを照会しない方法を任意に使用することができます)
                        テスト=新しいリスト<整数>(){3、3、1} .FirstOrDefault(Y => Y == 1)、
                        AAA = "6666" + "777"、
                        コンテンツ= a.Content + " '試験'" + b.Headlines + a.IdentityId、
                        //このフィールドは、サブクエリ内にスプライシング、しないで巡回クエリによるパフォーマンスの問題を心配されます
                        BBB =新しいクエリセット<コメント>(CONN、新しいMySqlProvider())
                              .Where(Y => y.ArticleId == b.Id && y.Content.Contains( "試験"))。合計<コメント>(X => x.Id)
                        CCC = a.IdentityId、
                        ( "コメントから(SELECT COUNT(1))")DDD = Convert.ToInt32
                    });

  

完全なデモはGithubの上、ダウンロードに行くことができます:

https://github.com/a935368322/Kogel.Dapper.Test

ご質問がある場合、あなたはまた、QQのグループディスカッションを追加することができます。

テクノロジー・グループ710 217 654

オープンソースのフレームワークには、ソースコードに加えてグループをダウンロードすることができます

おすすめ

転載: www.cnblogs.com/kogel/p/11859102.html