FreeSqlを取らマルチテーブルデータ

FreeSqlを取らマルチテーブルデータ

一例として分類する記事やエッセイ。

  1. テーブル構造の
    フィールドとして一部、他の多くの関連付けを表示するために省略され、分類は複数の物品であってもよいです。紙は、分類に属します。

blog_article(エッセイテーブル)

フィールド タイプ リマーク
ID int型
classify_id int型 カテゴリID
題名 VARCHAR(50) 見出し
コンテンツ VARCHAR(4000) テキスト

blog_classify(エッセイカテゴリコラム)

フィールド タイプ リマーク
ID int型
ClassifyName VARCHAR(50) カテゴリ名

どのFullAduitEntity、エンティティが、中にオープンソース・プロジェクトなど、削除フィールドするかどうかなど、ABPの時間を作成することである、あなたが自分で検索することができ、

Article.cs

[Table(Name = "blog_article")]
  public class Article : FullAduitEntity
  {
      /// <summary>
      /// 文章所在分类专栏Id
      /// </summary>
      public int? ClassifyId { get; set; }

      public Classify Classify { get; set; }
      /// <summary>
      /// 标题
      /// </summary>
      [Column(DbType = "varchar(200)")]
      public string Title { get; set; }
      /// <summary>
      /// 正文
      /// </summary>
      [Column(DbType = "text")]
      public string Content { get; set; }
  }

Classify.cs

[Table(Name = "blog_classify")]
public class Classify:FullAduitEntity
 {
     public string ClassifyName { get; set; }
     public List<Article> Articles { get; set; }
 }

従来のナビゲーション属性を使用して

  1. 分類プロパティはnullです
List<Article> articles1 = _articleRepository
                        .Select
                        .ToList();

2.分類プロパティの値がします
、我々はフォアグラウンドでデータを取得し、あなたはまた、直接のプロパティに分類サイクルを取ることができます

List<Article>articles2=  _articleRepository
    .Select
    .Include(r => r.Classify)
    .ToList();

もし、そこに戻ってフィルタリングするためのフィールドのいくつかのうちには、作成時刻、変更時刻監査ログを濾過し、DTOを使用するために、フロントデスクに渡され、AutoMapperを使用することができます

作成ArticleDto

public class ArticleDto : Entity
 {
     /// <summary>
     /// 类别Id
     /// </summary>
     public int? ClassifyId { get; set; }
     /// <summary>
     /// 类别名称
     /// </summary>
     public string ClassifyName { get; set; }
     public string Content { get; set; }
     public string Title { get; set; }
 }

図3は、IMapperと、ArticleDtoに変換しました

List<ArticleDto> articles3 = _articleRepository
            .Select
            .ToList(r=>new
            {
                r.Classify,
                Article=r
            }).Select(r=>
            {
                ArticleDto articleDto=_mapper.Map<ArticleDto>(r.Article);
                articleDto.ClassifyName = r.Classify.ClassifyName;
                return articleDto;
            }).ToList();
  1. またIMapper変換を使用しますが、ここに含める行き、少し異なるを使用しています。

文書は「貪欲ロードされたナビゲーションプロパティを含めるについて説明し、クエリがa.Parent.Parent同様の表現を使用されている場合は、あなたがこれを実行する必要はありません。..

ここでは、クエリがa.Parent.Parentを使用して、上記3を参照してください、ToListメソッドであること

.ToList(r=>new
      {
          r.Classify,
          Article=r
      })

r.Classifyは、Join関数が生成されます。あなたが希望するデータToListメソッドを選択したくない場合は、データが削除含める相関させる必要があるとして、使用することができます。そして、後ろにデータを変換するために、選択のLINQを使用し、バックはr.Classifyがnull、必要?取るかもしれ注目されるべきです。ClassifyIdオプション項目ので。

List<ArticleDto> articles4 = _articleRepository
    .Select
    .Include(r => r.Classify)
    .ToList().Select(r =>
    {
        ArticleDto articleDto = _mapper.Map<ArticleDto>(r);
        articleDto.ClassifyName = r.Classify?.ClassifyName;
        return articleDto;
    }).ToList();

直接参加します

  1. テーブル一覧と分類で関連付けプロパティ取得列を使用しないで、分類属性クラス条この時間
    あなたは、削除することができます
List<ArticleDto> articleDtos = _articleRepository
            .Select
            .From<Classify>((a, b) =>a.LeftJoin(r => r.ClassifyId == b.Id)
            ).ToList((s, a) => new
            {
                Article = s,
                a.ClassifyName
            })
            .Select(r =>
            {
                ArticleDto articleDto = _mapper.Map<ArticleDto>(r.Article);
                articleDto.ClassifyName = r.ClassifyName;
                return articleDto;
            }).ToList();

記事の名前とその分類するために使用するSQLの直接アクセス

6.SQLは、独自の判断を増加させる必要性をis_deleted。

List<ArticleDto> t9 = _freeSql.Ado.Query<ArticleDto>($@"
                SELECT a.*,b.item_name as classifyName
                FROM blog_article a
                LEFT JOIN base_item b
                on a.classify_id=b.id where a.is_deleted=0"
);

概要

同じ引き継がれるデータの行数。
多く。

  1. 非常に単純なSQLを書きます。
  2. 使用にORMに参加し、その後、マッパーで複雑になります。
  3. 問題を解決するために含まれ、関連するデータを取り、ナビゲーションプロパティを使用します
  4. ナビゲーションプロパティを使用して、関連するデータを取り、その後、マッパーで、基本的にはあなたのLINQ、AutoMapperレベルに依存します。ハハ。

そのようなクラス条分類などの特定の値、ClassifyNameで撮影した変換後のArticleDto上記

おすすめ

転載: www.cnblogs.com/Study-Csharp/p/12240654.html