【15周年記念 特設サイト】ビヨンドは「2022.4.4」で15周年を迎えました!

【15周年記念 特設サイト】ビヨンドは「2022.4.4」で15周年を迎えました!

【新卒 / キャリア採用】サーバー / クラウドエンジニア 募集中!【大阪】

【新卒 / キャリア採用】サーバー / クラウドエンジニア 募集中!【大阪】

【導入実績300社以上】AWS 構築・運用保守サービス

【導入実績300社以上】AWS 構築・運用保守サービス

【サーバー管理不要】WordPress専用クラウド『WebSpeed』

【サーバー管理不要】WordPress専用クラウド『WebSpeed』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【コミュニケーションアプリ開発】LINE アプリ開発サービス

【コミュニケーションアプリ開発】LINE アプリ開発サービス

【ECサイト構築】Shopify カスタムアプリ開発サービス

【ECサイト構築】Shopify カスタムアプリ開発サービス

【音声アプリ開発】Twilio アプリ開発サービス

【音声アプリ開発】Twilio アプリ開発サービス

【Webシステム / サービス開発】SAKARAKU Lab(セカラクラボ)

【Webシステム / サービス開発】SAKARAKU Lab(セカラクラボ)

【取材記事】サーバー系企業ビヨンドが サーバーサイドエンジニアを募集中

【取材記事】サーバー系企業ビヨンドが サーバーサイドエンジニアを募集中

【対談記事】「やっぱクラウド移設っていいですよね」マイネット × ビヨンド エンジニア対談

【対談記事】「やっぱクラウド移設っていいですよね」マイネット × ビヨンド エンジニア対談

ビヨンド公式YouTubeチャンネル「びよまるチャンネル」

ビヨンド公式YouTubeチャンネル「びよまるチャンネル」

【Entity Framework Core】Where文でカラムを変数で指定する方法【ASP.NET Core】


こんにちは、システム開発部の長谷です。

最近また ASP.NET Core で開発をするようになったのですが、Entity Framework Core の Where で情報を
取得するときに、カラム名を変数で動的に指定できることを知って感動したので、
紹介させていただきます。

前置き

まず、以下のようなテーブルデータがあるとします。

Accounts

Id NickName LastName FirstName
1 れな 畠山 麗奈
2 としあき 松崎 俊明
3 せな 石井 世奈
4 しょうぞう 小倉 祥三
5 こうたろう 晃太郎

※テスト用データであり、こちらのサイトから抽出しました。

こちらのデータからカラムと値をそれぞれ指定してレコードを抽出したいと思います。

普通のやり方

普通のやり方では カラムをそもそも動的に指定することができないため、以下の様なコードになります

string columnName = "LastName";     // カラム名
string value      = "畠山";         // 検索値

// 指定されたカラム名と値からレコードを抽出
var query = context.Accounts;
switch (columnName)
{
    // NickName カラムを指定した場合
    case "NickName":
        query = query.Where(c => c.NickName== value);
        break;
    // LastName カラムを指定した場合
    case "LastName":
        query = query.Where(c => c.LastName== value);
        break;
    // FirstName カラムを指定した場合
    case "FirstName":
        query = query.Where(c => c.FirstName == value);
        break;
}

var account = query.FirstOrDefault();

と switch 文でそれぞれのカラム名を case で比較していくという、かなり冗長的なコードになってしまいます。

カラム名を変数で指定するやり方

ですが、Entity Framework Core にはカラム名を動的に指定する方法があります!
それが、EF.Property メソッドというものです。
こちらは、引数でプロパティ(カラム名)を動的に指定することができる優れものとなっております。

実際に先ほどのコードをこのメソッドを使った形に修正すると

string columnName = "FirstName";         // カラム名
string value      = "世奈";              // 検索値

// 指定されたカラム名と値からレコードを抽出
var account = context.Accounts.Where(c => EF.Property<string>(c, columnName) == value).FirstOrDefault();

と switch 文を使わず、なんと1行で書けるようになりました。
※ Microsoft.Entity Framework Core を using する必要があります。

まとめ

いかがだったでしょうか?

個人的にはかなり便利な機能だと思いました。
リッチな検索機能を実装したいときとかに、きっと活躍してくれると思いますので、
Entity Framework Core を使う際はぜひ参考にしてみて下さい!

最後に

私が所属するシステム開発のサービスサイト「SEKARAKU Lab(セカラク ラボ)」を開設しました。
ビヨンドは、サーバーの設計・構築から運用までをワンストップでお任せいただけますので、サーバーサイド開発でお困りの方はお気軽にお問い合わせください。
SEKARAKU Lab:[https://sekarakulab.beyondjapan.com/](https://sekarakulab.beyondjapan.com/)

短いですが、以上になります。


この記事をかいた人

About the author

長谷竜弥

新卒にて株式会社ビヨンドに入社。

Webシステム開発(Webサービス・デジタルコンテンツ・業務管理システム などのブラウザで動くサービス、システムの開発)や、ゲームAPI(アプリゲームとの通信部分のプログラム開発)を行っている。

また、Shopify のプライベート / カスタムアプリの開発も行っている。

元々は大阪オフィスに勤めていたが、2019年に横浜オフィスに転勤。
趣味は野球 / カラオケ / アニメ