月別アーカイブ: 2018年11月

【C#】ASP.netのTips

コードを書いてて、たまに「あれ?どうやるんだっけ」となるコードの備忘録です。

ListからIN句で使えるSQLを生成する

IN文句に対してプレースホルダが使えるようなORMを使っている場合はいいのですが、たいていの場合、うまく動いたためしがないので、文字列結合してくっつけます。Linqのメソッド構文でサクッと書けます。

// IN句で使えるようにシングルクォーテーション+カンマつなぎにする
var condition = string.Join(",", piyoIdList.Select(x => string.Format("'{0}'", x)));

// SQLを実行(テンプレートリテラルで条件値を設定)
var sql = $"SELECT * FROM T_HOGE WHERE piyoId IN ({condition});";

ただし、仕様上、IN句内のデータが大量になることが想定される場合はパフォーマンスの観点からお勧めできません。使用するDBによってはIN句内の設定値件数オーバーでエラーとなります。そのような場合は、素直にtempテーブルを作ってINNER JOINするか、Listを分割して複数回クエリを発行し、後でフェッチした値をAddRangeするなどの方法が考えられますが、前者の方がパフォーマンスが良いと思われます。

【C#】Asp.net MVCのハマりポイント

Asp.net でRazorを使っているといつもハマってしまうトラップポイントがありますので忘れないようにまとめておきます。

EditorForヘルパーについて

EditorForヘルパーは、HTML属性が反映されない。例えば以下のように書いても非活性になりません。その場合はためらわずTextBoxForなどの個別のヘルパーを使用します。placeholderや、Readonlyも同様です。

@Html.EditorFor(model => model.StoreName, new { @disabled = "disabled" })

以下のように書きます。

@Html.TextBoxFor(model => model.StoreName, new { @disabled = "disabled" })

DropDownListがselectedにならない

DropDownListForは、Modelとバインドした場合、第2引数のSelectListItemの値とModelの値が合致した場合、selectedに自動でしてくれる仕様があるのですが、ならない場合があります。
詳しく調べたわけではないのですが、どうも型が合っていないと一致とみなしてくれないようです。その場合の対処法としては、ViewModelの型を変更して合わせるか、.chtml内で再度SelectListItemをnewして、Modelの値と一致したらselectedを設定してあげるという技があります。

@Html.DropDownListFor(
    model => model.PrefectureCode,
    Model.PrefectureOptions,
    "都道府県を選択してください",
    new { @class = "title_list"}
)
@Html.DropDownListFor(
    model => model.PrefectureCode,
    Model.PrefectureOptions
    .Select(x => new SelectListItem()
                {
                    Value = x.Value,
                    Text = x.Text,
                    Selected = x.Value == Model.PrefectureCode
                }),
    "都道府県を選択してください",
    new { @class = "title_list"}
)

【AWS】T3インスタンスについて

最近、新しく追加されたインスタンスタイプ「T3
インスタンス」についてまとめておきます。

スペックはT2インスタンスより良い

t3.micro のインスタンスタイプでも、vCPUが2つ搭載されています。

https://aws.amazon.com/jp/ec2/instance-types/

料金が若干安い

詳しい料金表はこちら

https://aws.amazon.com/jp/ec2/pricing/on-demand/

ベースCPU使用率は20%

T2インスタンスでは、CPUクレジット残高がないときは10%しか使用できませんでしたが、T3インスタンスでは20%まで使えます。

CPUクレジット残高のMAXが600

T2インスタンスでは、CPUクレジット残高は150までしか貯金できませんでしたが、T3インスタンスでは600まで貯金できます。

注意点

初期CPUクレジット残高は0

T3インスタンスの起動時は初期CPUクレジットが0で始まります。ですので、うっかりインスタンスの停止・起動をやってしまうと今までのCPUクレジット残高が0になります。インスタンスの再起動ではCPUクレジット残高はリセットされないので再起動するようにしましょう。

CPUバーストがUnlimitedモードが初期設定 

CPUクレジット残高を超えてバーストできますが、無制限に、かつ課金されながらバーストするので要注意です。Unlimitedをコンソールから無効にできます。

VisualStudioCodeの備忘録

最近大好きなVisualStudioCode(VSCode)の備忘録です。基本設定、お気に入りのパッケージなどをまとめておきます。

設定

ファイル→基本設定→設定で設定します。以下はやっておくと便利。

起動時にリリースノートを開かなくする

// 更新後にリリースノートを表示します。リリースノートはMicrosoftのオンライン サービスから取得されます
"update.showReleaseNotes": false

ファイルオープン時のエンコードを自動判定する

// 有効な場合、ファイルを開くときに文字セット エンコードをエディターが推測します。言語ごとに構成することも可能です。
"files.autoGuessEncoding": true

ホイールスクロールでフォントを拡大縮小する

// `Ctrl` キーを押しながらマウス ホイールを使用してエディターのフォントをズームします。
"editor.mouseWheelZoom": true

自動挿入された末尾の空白を削除する

// 自動挿入された末尾の空白を削除します。
"editor.trimAutoWhitespace": true

エディターで空白文字を表示する

  // エディターで空白文字を表示するかどうかを制御します。
  //  - none
  //  - boundary: 単語間の単一スペース以外の空白文字を表示します。
  //  - all
  "editor.renderWhitespace": "all"

パッケージ

個人的に必須なパッケージ

ショートカット

キー操作実行結果
Ctrl + k、Ctrl + cコメントアウト

今日はここまで…。