FreeSqlを取らマルチテーブルデータ
一例として分類する記事やエッセイ。
- テーブル構造の
フィールドとして一部、他の多くの関連付けを表示するために省略され、分類は複数の物品であってもよいです。紙は、分類に属します。
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; }
}
従来のナビゲーション属性を使用して
- 分類プロパティは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();
- また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();
直接参加します
- テーブル一覧と分類で関連付けプロパティ取得列を使用しないで、分類属性クラス条この時間
あなたは、削除することができます
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"
);
概要
同じ引き継がれるデータの行数。
多く。
- 非常に単純なSQLを書きます。
- 使用にORMに参加し、その後、マッパーで複雑になります。
- 問題を解決するために含まれ、関連するデータを取り、ナビゲーションプロパティを使用します
- ナビゲーションプロパティを使用して、関連するデータを取り、その後、マッパーで、基本的にはあなたのLINQ、AutoMapperレベルに依存します。ハハ。
そのようなクラス条分類などの特定の値、ClassifyNameで撮影した変換後のArticleDto上記