[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