C# 内部結合
C# Linqでinner Joinした結果を表示
最初に
現場で使っている技術や、教えてもらったことをアウトプットしていきたいので、記事にしてみました。
今回はinner joinやViewに表示する部分について書きます。
Model
オレンジの部分が紐づけするテーブルデータです。
Person.cs
- public int PersonId { get; set; }
- public string Name { get; set; }
- public string Mail { get; set; }
- public int TeamId { get; set;}
- public string TeamName { get; set;}
Team.cs
- public int TeamId
- public string TeamName
- public string HeadQuarterName { get; set; }
- public string Place { get; set;}
Dto
複数のテーブルデータを格納するクラス。結合後にPersonとTeamを呼び出すために必要
Dto.cs
- public Person Person { get; set; }
- public Team Team { get; set; }
Context
Context.cs
public class Context : DbContext
{
public Context(DbContextOptions<Context> options)
: base(options)
{
}
public DbSet<Person> Person{ get; set; }
public DbSet<Team> Team{ get; set; }
}
DBから読み込むためのテーブル名を記述しています。
Controller部分やテーブルを呼び出す際に使用します。
Controller&linq記述
PeopleController.cs
private readonly Context _context;
public PeopleController(Context context)
{
_context = context;
}
public IActionResult PersonTeam()
{
① var PersonQuery = _context.Set<Person>
var TeamQuery = _context.Set<Team>
//inner join!!
var PTQuery = PersonQuery.Join(
TeamQuery,
② p => new { p.TeamId, p.TeamName},
t => new { t.TeamId, t.TeamName},
③ (p,t) => new Dto
{
④ Person = p,
Team = t
});
//ここまで
return View(PTQuery);
}
①_context.Set
AsNoTracikingでテーブルのデータが多い時にメモリ不足になる可能性があるので
読み取り専用にする。
②共通するカラムの紐づけ カラムが一つの場合はnewなしの記述もできる。
④Dtoクラスに定義したPersonとTeamに代入
View
PersonTeam.cshtml
ほぼドキュメント通りなので参考リンク置いときます。
コントローラーの記述が違うのでViewに渡す@modelの部分を変更。
@model IEnumerable<Dto>
DtoクラスのPersonとTeamを呼ぶのでこの形になります。
@Html.DisplayNameFor(model => model.Person.PersonId)
@Html.DisplayFor(modelItem => item.Person.PersonId)
結果
最後に
sqlに繋ぐための設定は、以下のファイルに記述していきます。
appsetting.json Startup.cs
Microsoftのドキュメントに詳しく載ってるのでこちらを参考にしました。
Spring Framework 実行環境メモ
Spring FrameWorkの勉強のため、書籍を購入。
詰まった点等をメモります。
開発環境 Eclips Pleades all in one Eclips
Jdk-12.0.2 jre1.8.0_211
STS(Spring Tool Suite)+Gradleに関しては、ヘルプ→eclipseマーケットプレイスにてDL確認
jdkはjavaアプリケーション作成時にinstall済み。
Pleades install時にspring Frameworkを使うための必要なものがほぼそろっているので
プロジェクト作成。
注意点はjava8を選ぶこと。
もし違うverを選んでしまった場合。
java-1.8じゃないと対応してないので、変更。
プロジェクト→プロパティ→javaのビルドパス→ライブラリ→JREシステムライブラリ→編集→実行環境java-se1.8
後は参考書籍通りにうまくいけば、
となります。
参考書籍:spring Boot プログラミング入門2 著者:掌田 津耶乃
githubメモ①
mkdir フォルダ名 フォルダ新規作成
cd フォルダ名 パス
git init gitリポジトリ新規作成
touch README.md README.ad作成
echo$ "" > README.md 中身に書き込み
git add ファイル名 追加(commit対象)
git commit -m 'メッセージ'add commit
git commit -m 'メッセージ'add -- ファイル名 1つcommit
git log --oneline git commit log
git rebase -i HEAD~数字 書き換え
git remote add origin url githubのurl
git push origin master github push 反映させる
matches
入力時のチェック文字と文字数チェック
matches("[a-z0-9]{6,8}")
a-z0-9までの文字が使えて、6~8文字までならtrueを返す。それ以外ならfalse
("[a-z]{1}+[0-9]{6,8}") これだと最初の一文字が記号で後は数字
他にも日付や郵便番号等にも使えるのでかなり便利。
コンソールでログイン機能②
新規登録してからログインまで。①からの追加分。
実行(新規登録+ログイン)
javabeans
ログイン処理
入力結果
新規登録 id+password入力→javabeansにidとpasswordを送る
ログイン id+password入力→ログイン処理
javabeansに送られたid+password とログイン時に入力したid+passwordをチェック
一致したらtrueを返す。
今後の目標:登録時の文字数チェック等。
コンソールでログイン機能
まずはコンソール画面で作成。
実行
ログイン処理
Logic
結果表示
id1111 password2222 入力。
idとpasswordが一致すればtrueを返す。
今後の目標:新規id+password登録→ログインの形にしたい。