投稿

10月, 2024の投稿を表示しています

10月31日(木)1、2コマ目

イメージ
今日、やったこと グループ化 [練習問題]練習問題3 今日のホワイトボード ダメな例 SQLの感覚で書くとエラーになってしまう例を紹介。 図 LINQのダメな例 〇ダメな例1 joinのon以降(結合条件)は以下を守らないとコンパイルエラー。 左辺はfrom指定値 右辺はjoin指定値 〇ダメな例2 グループ化した際、select句ではgroup指定値以外は使えない。 グループ関数を使う count()やsum()、min()、max()を使う。 count()以外は引数がラムダ式。 図 グループ関数を使う 〇count()を使う Count()関数でグループ内のデータ件数をカウント。 〇sum()、min()、max()を使う くどいけど、引数はラムダ式。 複数列でグループ化 group byにて、匿名クラスで指定されたプロパティの値が同じ行を同じグループにする。 select句でデータを取り出す際は、Keyプロパティはグループ化する際の匿名クラス。 図 複数列でグループ化 練習問題3 文字列のフォーマット指定のうち、日時データのフォーマット指定子 図 日付のフォーマット指定子 次回は 練習問題の解説。

10月29日(火)1、2コマ目

イメージ
今日、やったこと [練習問題 解説]LINQ練習問題1 行で検索 行を並び替え [練習問題 解説]LINQ練習問題2 グループ化 今日のホワイトボード [練習問題 解説]LINQ練習問題1 前回の練習問題の正解例をあげておきます。 DbContext.cs 以前と同じ。 [モデル]Maker.cs メーカーマスタテーブルに対応するクラス。以前と同じ。 [モデル]Genre.cs 製品ジャンルマスタテーブルに対応するクラス。以前と同じ。 [モデル]Camera.cs 製品マスタテーブルに対応するクラス。以前と同じ。 Program.cs   行で検索 wehreで行う。SQLに似ているが、あくまでもC#。 等価演算子、非等価演算子、論理演算子(AND、OR)に注意。 図 行を検索 行を並び替え SQLとほぼ同じ。 降順の”desc”は"descending"。 図 行を並び替え [練習問題 解説]LINQ練習問題2 行の検索、並び替えの問題 正解例をあげておきます DbContext.cs 以前と同じ。 [モデル]Group.cs CS_グループマスタテーブルに対応するクラス。以前と同じ。 [モデル]Item.cs CS_商品マスタテーブルに対応するクラス。以前と同じ。 Program.cs グループ化 group byでグループ化できる。 Keyプロパティでグループ化した際のプロパティが取得できる 図 group byでグループ化 グループ関数count()のような処理をすることもできる。 グループ化した結果をいったん仮テーブルに入れて、仮テーブルで各グループに対する処理を行うイメージ。 図 group by intoでグループ化した結果を仮テーブルに格納、selectで利用 じかいは グループ化のつづき。

10月24日(木)1、2コマ目

イメージ
今日、やったこと LINQ テーブルの結合(内部結合) [確認テスト]ASP.NET Core MVC 確認テスト1 今日のホワイトボード [LINQ] テーブルの結合 クエリ構文で書くとSQLのinner joinと同じ感じ。 ただし、 on以降の結合条件の等価演算子 は以下に注意!! =ではない (C#では=は代入演算子) ==ではない (参照型の場合、同じ参照先か比較、同じ値ならいい) equals int型やdouble型のような値型変数同士なら==もequalsも同じ動き。  xxxクラスのインスタンスのような参照型変数同士の場合、==は同じ参照先かチェック。 equalsは同じ値かチェック(参照先は異なってもいい)。 図 テーブルの結合 ソースコードをあげておきます。 [モデル]Group.cs CS_グループマスタテーブルに対応するクラス。以前と同じ。 [モデル]Item.cs CS_商品マスタテーブルに対応するクラス。以前と同じ。 [DbContextクラス]SampleDbContext.cs DBアクセス担当。以前と同じ。 Program.cs CS_商品マスタとCS_グループマスタを結合して、商品ID、商品名、グループ名を取得。 次回は LINQの練習問題1、確認テスト1の解説をします。

10月22日(火)1、2コマ目

イメージ
今日、やったこと [練習問題 解説]練習問題4  LINQ 今日のホワイトボード [練習問題 解説]練習問題4  検索サイトの作成。正解例をあげておきます。 Models/Maker.cs メーカーマスタに対応するクラス。練習問題3とおなじ。 Models/Genre.cs 製品ジャンルマスタに対応するクラス。練習問題3とおなじ。 Models/Camera.cs 製品マスタに対応するクラス。練習問題3とおなじ。 Models/SearchViewModel.cs コントローラーからビューにデータを渡すために利用。 Data/SearchDbContext.cs DBアクセスを担当。練習問題3とおなじ。 Controllers/SearchController.cs アクションメソッドIndex()は2つあるが、[HttpPost]アノテーションが付いている方はPOSTコマンドでリクエストされたときに実行。 ビューにデータを渡す際、今までのViewDataを使わずに、ViewModelを利用。 Views/Search/Index.cshtml コントローラーからViewModelでデータを受け取る。 LINQとは LINQは.Netでコレクションのデータを操作するためのライブラリ。 メソッド構文とSQLに似たクエリ構文がある。この授業ではクエリ構文を使う。 今まで使っていたEntityFrameworkCoreでLINQを使ってDBアクセスを行う。 準備 EntityFrameworkCoreでCS_グループマスタテーブル、CS_商品マスタテーブルにアクセスするために、モデルクラス、DbContextクラスを用意。 [モデルクラス]Group.cs CS_グループマスタテーブルに対応するクラス。 ...

10月17日(木)1、2コマ目

イメージ
今日、やったこと 検索アプリをつくる(+ViewModelをつかう) [練習問題]練習問題4 今日のホワイトボード 検索アプリをつくる(前回のつづき) 前回からの続き。検索条件を選択するための選択リストにグループ一覧を表示するところまで作成済み。 〇POSTコマンドでリクエストした際の処理は?  検索ボタンをクリックすると、POSTコマンドでサーバーにリクエスト。コントローラーは[HttpPost]アノテーションが付いたアクションメソッドが実行される。 また、選択された検索条件はパラメータ名と同名の引数に渡される。 〇検索は EntityFrameworkCoreを使ってDBアクセスしている。SQLのwhere句やorder by句に相当するWhere()メソッド、OrderByDescending()メソッドがある。 図 LINQで検索、並び替え Controllers/SearchController.cs Views/Search/Index.cshtml 検索アプリをつくる(+ViewModelをつかう) コントローラーからビューにデータを渡す際、今まではViewDataを使っていた。 図 [今まで]ViewDataでデータを受け渡し が、今回は新たにViewModelを使う。 図 [これから]ViewModelでデータを受け渡し 変更は以下のとおり。 Models/SearchViewModel.cs コントローラーからビューに渡すデータをこのクラスでひとまとめにて受け渡す。 Controllers/SearchController.cs ViewDataの代わりにViewModelのSearchViewModelを使って受け渡す。 return View()の引数に受け渡すViewModelを指定することを忘れずに。 Views/Search/Index.cshtml @modelでSearchViewModelをViewModelとして利用することを宣言。 コントローラーから渡されたSearchViewModelはModelでアクセスできる。 ViewDataはキーを指定してデータセット、取り出しをして...

10月15日(火)1、2コマ目

イメージ
今日、やったこと DBのリレーションをたどる [練習問題]練習問題3 検索アプリを作る 今日のホワイトボード DBのリレーションをたどる CS_商品マスタとCS_グループマスタを結合して、グループIDではなく、グループ名を表示したい。 図 グループIDをグループ名に変更 2つのテーブル間のリレーションシップと同じように、Itemクラスに結合するGroupクラスのインスタンスを格納するGroupプロパティを追加。このプロパティをナビゲーションプロパティと呼ぶ。 図 ItemクラスにGroupプロパティを追加 ソースコードをあげておきます。 appsettings.json DB接続文字列を設定。以前と同じ。 Models/Group.cs CS_グループマスタに対応するクラス。 Models/Item.cs CS_商品マスタテーブルに対応するクラス。 ナビゲーションプロパティ"Group"経由で結合すべきGroupクラスのインスタンスにアクセスできる 。 Data/SampleDbContext.cs CS_グループマスタにアクセスするためのGroupsプロパティ、CS_商品マスタにアクセスするためのItemsプロパティがある。 Controllers/SearchController.cs アクションメソッドAll()にて、CS_グループマスタ、CS_商品マスタ検索結果を取得。 取得した検索結果はViewData経由でビューに渡す。 Views/Search/All.cshtml ViewData経由で渡された検索結果を表示。 Program.cs DI機能でSampleDbContextのインスタンスを生成。 以前と同じ。 [練習問題]練習問題3 練習問題2で使った3つのテーブルを結合した結果を表示する。 正解例をあげておきます。 Models/Maker.cs メーカーマスタに対応するクラス。 Models/Genre.cs 製品ジャンルマスタに対応するクラス。 Models/Camera.cs 製品マスタに対応するクラス。 参照するメーカーマスタ、ジャンルマスタのためのMakerプロパ...

10月10日(木)1、2コマ目

イメージ
今日、やったこと モデルを使う(前回のつづき) [練習問題]練習問題2 今日のホワイトボード モデルを使う(前回のつづき) 前回は URL http://xxxx/Group でアクセスすると、CS_グループマスタ全件検索結果を表示した。 今回は URL http://xxxx/Item でアクセスすると、CS_商品マスタ全件検索結果を表示する。 図 完成イメージ 前回作ったプロジェクトの改造なので、以下は不要。 パッケージのインストール appsettings.json SampleDbContext.cs Program.cs 今回追加したモノは以下。 Models/Item.cs CS_商品マスタテーブルに対応するクラス。 アノテーションを使ってクラスとテーブル、プロパティと列を紐づけ。 Controllers/ItemController.cs URL http://xxxx/Item でアクセスした際に動くアクションメソッドを持つクラス。 Views/Item/Index.cshtml コントローラー ItemControllerのアクションメソッドIndex()用のビュー。 [練習問題]練習問題2  3つのテーブルの全件検索結果を表示する。 まず、以下が必要。 パッケージのインストール appsettings.json [モデル]Models/Camera.cs 製品マスタテーブルに紐づくクラス。 [モデル]Models/Genre.cs 製品ジャンルマスタテーブルに紐づくクラス。 [モデル]Models/Maker.cs メーカーマスタテーブルに紐づくクラス。 [コントローラー]Controllers/CameraController.cs URL http://xxxx/Camera でアクセスした際に実行されるアクションメソッドを持つクラス。 [ビュー]Views/Camera/Camera.cshtml コントローラーCameraControllerのアクションメソッドCamera()から呼び出されるビュー...

10月8日(火)1、2コマ目

イメージ
今日、やったこと [練習問題]練習問題1 モデルを使う(DBアクセス) 今日のホワイトボード [練習問題]練習問題1 前回使ったコントローラー、ビューを使う練習問題。 URLとコントローラークラス、アクションメソッドの関係は下図のとおり。 図 URLとコントローラークラス、アクションメソッドの関係 正解例をあげておきます。 Controllers/RandomController.cs コントローラークラス。 クライアントからのリクエストを受けて、処理を行い、ビューを表示。 Views/Random/Index.cshtml ビュー。 コントローラークラスRandomControllerのアクションメソッドIndex()に対応するビュー。 Views/Random/Even.cshtml ビュー。 コントローラークラスRandomControllerのアクションメソッドEven()に対応するビュー。 Views/Random/Odd.cshtml ビュー。 コントローラークラスRandomControllerのアクションメソッドOdd()に対応するビュー。 モデルを使う モデル自体は構造体的なデータをまとめたモノだが、データを取得、格納するためにDBアクセスも行う。 今回はDBアクセスをO/Rマッピングツールの"Entity Framework Core"を使って、SQLなしでDBからデータを取得する。 図 DbContextクラスとコントローラークラス 前回 は以下をおこなった。 パッケージのインストール 以下の2つパッケージが必要。 Microsoft.EntityFrameworkCore Oracel.EntityFrameworkCore 以前設定したローカルパッケージソース”MyPackag...

10月3日(木)3、4コマ目

イメージ
今日、やったこと モデル 今日のホワイトボード [練習]ViewDataを使う URL http://localhost:xxxx/Show/List/x?limit=xx でアクセスすると xで指定したリストマーカーで1からxxまでの箇条書きを表示。 ViewDataでコントローラーからビューに 箇条書きマーカーの種類 箇条書き項目の上限値 を渡す。 図 [練習]ViewDataを使う 正解例をあげておきます。 [コントローラー]ShowController.cs [ビュー]Show/List.cshtml モデルを使う モデルはアプリケーションに必要なデータのクラス。 ただ、データはDBに保存するケースが多いため、DBアクセスも発生する。 DBアクセスにはDbContextクラスを継承したクラスを用意する。 CRUDアプリを作る 簡単にデータの 登録(Create) 読み込み(Read) 変更(Update) 削除(Delete) ができるCRUDアプリケーションを作成することができる。 ”新規スキャフォールディングアイテム”->"EntityFrameworkを使用したビューがあるMVCコントローラー"で必要なコントローラーとビューを自動生成してくれる。 図 半自動でCRUDアプリを作る 既存のテーブルを使う すでにDB上にあるテーブルをモデルクラスに対応させるには [Table("テーブル名")]アノテーションをクラスに [Column("列名")]アノテーションをプロパティに 設定すれば、クラス名、プロパティ名がテーブル名、列名と一致しなくても対応付けできる。 ...

10月3日(木)1、2コマ目

イメージ
今日、やったこと MVCとは コントローラークラス クエリパラメータ、パスパラメータ ビュー ViewData 今日のホワイトボード この授業は 前期のASP.NET CoreのRazorページを使ったWebアプリケーションにMVCモデルを追加。 .Net側で結構いろいろやってくれるのはいいけど、ルールがいろいろとあるので、下手をするとなぜ動くのかがまったくわからない状態になるので注意。 MVCモデル アプリケーションをモデル(M)、ビュー(V)、コントローラー(C)の3つの役割に分割して作成するアプリケーションのアーキテクチャの1つ。 前期のRazorページをMVCモデルにあてはめると下図のようになる。 図 前期のRazorページアプリケーションをMVCモデルにあてはめると MVCそれぞれの役割は下図のとおり。 図 MVCの役割 ①クライアントからのリクエストをコントローラーが受信 ②コントローラーはモデルを使って必要なデータをDBから取得 ③コントローラーはビューに必要なデータを渡す ④クライアントにビューを返信 コントローラーを使う どのコントローラーのアクションメソッドを実行するかはURLで決まる。 図 URLとコントローラークラス、アクションメソッドの関係 このようにルールが出来上がっていて、ルールに従ってプログラムを作っていく必要がある。 リクエスト時にデータを渡す(クエリパラメーター) URLに   http://・・ ?パラメータ名=値&パラメータ名=値 と?のあとにパラメータ名と値のセットを指定してサーバーにデータを渡すことができる。これがクエリパラメータ。 クエリパラ...