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

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

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

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

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

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

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

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

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

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

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

前置き

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

Accounts

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

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

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

普通のやり方

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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 メソッドというものです。
こちらは、引数でプロパティ(カラム名)を動的に指定することができる優れものとなっております。

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

1
2
3
4
5
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
4,869
X facebook はてなブックマーク pocket
【2026.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

【2026.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

この記事をかいた人

About the author

長谷竜弥

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

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

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

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