[Entity Framework Core] 如何在Where语句中指定带有变量的列[ASP.NET Core]

您好,我是系统开发部的 Hase。

我最近又开始使用 ASP.NET Core 进行开发,令
我印象深刻的是,在使用 Entity Framework Core 的 Where 命令检索信息时,可以使用变量动态指定列名,所以我想
向大家介绍一下。

前言

首先,假设你有如下所示的表格数据:

账户

ID 昵称
1 蕾娜 畠山 雷纳
2 俊明 松崎 俊妙
3 塞纳 石井 塞纳
4 庄藏 小仓 庄藏
5 小太郎 小太郎

*这是从

我想通过指定列和值来从这些数据中提取记录。

通常的方式

通常情况下,您无法动态指定列,因此代码将如下所示:

string columnName = "LastName"; // 列名 string value = "Hatayama"; // 搜索值 // 从指定的列名和值中提取记录 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 = "Sena"; // 搜索值 // 从指定的列名和值中提取记录 var account = context.Accounts.Where(c => EF.Property<string> (c, columnName) == value).FirstOrDefault();

现在无需使用 switch 语句,即可在一行中编写代码。
*您需要使用 Microsoft.Entity Framework Core。

概括

你觉得怎么样?

我个人认为这是一个非常实用的功能。
我相信它在您需要实现丰富的搜索功能时会非常有用,所以
在使用 Entity Framework Core 时请务必了解一下!

最后

我开设了我所属的系统开发服务网站“SEKARAKU Lab”。
Beyond是从服务器设计搭建到运营的一站式服务,所以如果您在服务器端开发方面遇到任何问题,请随时联系我们。
SEKARAKU 实验室: [https://sekarakulab.beyondjapan.com/](https://sekarakulab.beyondjapan.com/)

篇幅很短,仅此而已。

如果您觉得这篇文章有帮助,请点赞!
3
加载中...
3 票,平均:1.00 / 13
5,250
X Facebook 哈特纳书签 口袋

写这篇文章的人

关于作者

长谷达也

应届毕业生加入Beyond Co., Ltd.。

我们开发网络系统(开发在浏览器上运行的服务和系统,例如网络服务、数字内容和业务管理系统)和游戏API(开发与应用程序游戏通信的程序)。

我们还为 Shopify 开发私人/自定义应用程序。

原本在大阪事务所工作,2019年调到横滨事务所。
我的爱好是棒球/卡拉OK/动漫