【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【25卒向け】AI×バーチャル面接の募集を開始いたしました!

【25卒向け】AI×バーチャル面接の募集を開始いたしました!

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

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

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

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

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

【中国現地企業に対応】中国クラウド / サーバー構築・運用保守

【中国現地企業に対応】中国クラウド / サーバー構築・運用保守

【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/)

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

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
3
読み込み中...
3 票, 平均: 1.00 / 13
3,916
X facebook はてなブックマーク pocket
【2024.6.30 CentOS サポート終了】CentOS サーバー移行ソリューション

【2024.6.30 CentOS サポート終了】CentOS サーバー移行ソリューション

【25卒向け】AI×バーチャル面接の募集を開始いたしました!

【25卒向け】AI×バーチャル面接の募集を開始いたしました!

【大阪 / 横浜】インフラエンジニア・サーバーサイドエンジニア 積極採用中!

【大阪 / 横浜】インフラエンジニア・サーバーサイドエンジニア 積極採用中!

この記事をかいた人

About the author

長谷竜弥

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

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

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

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