[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 = "Hatakeyama"; // 搜索值 // 从指定的列名和值中提取记录 var query = context.Accounts; // NickName 如果您指定列 case "NickName": query = query.Where(c => c.NickName== value); // 如果指定 LastName 列 case "LastName": query = query.Where(c => c .LastName== value); // 如果指定 FirstName 列 case "FirstName": query = query.Where(c => c.FirstName == value); } var account = query.FirstOrDefault () ;
这会导致相当冗余的代码,因为每个列名都是使用 switch 语句中的情况进行比较的。
如何用变量指定列名
但是,Entity Framework Core 有一种动态指定列名称的方法!
这就是所谓的
EF.Property 方法这是一个出色的功能,允许您使用参数动态指定属性(列名称)。
如果你真的修改上面的代码来使用这个方法,
string columnName = "FirstName"; // 列名称 string value = "Sena"; // 搜索值 // 从指定的列名称和值中提取记录 var account = context.Accounts.Where(c => EF.Property<string> (c, 列名) == 值).FirstOrDefault();
现在,您可以将其写在一行中,而无需使用 switch 语句。
*您必须使用 Microsoft.Entity Framework Core。
概括
你觉得怎么样?
就我个人而言,我认为这是一个非常有用的功能。
我相信当您想要实现丰富的搜索功能时它会很有用,所以
请在使用 Entity Framework Core 时将其作为参考!
最后
我开设了我所属的系统开发服务网站“SEKARAKU Lab”。
Beyond是从服务器设计搭建到运营的一站式服务,所以如果您在服务器端开发方面遇到任何问题,请随时联系我们。
SEKARAKU 实验室: [https://sekarakulab.beyondjapan.com/](https://sekarakulab.beyondjapan.com/)
虽然很短,但仅此而已。
如果您觉得这篇文章有帮助,请点赞!