【发布时间】:2021-05-03 06:44:39
【问题描述】:
我有 .NET 5 MVC 项目(原始 ASP.NET 3.1 Core MVC),我使用 EF Core 5 + React + Redux 和 MSSql。
我正在寻找一种方法,如何通过 REST GET 请求将数据从 React 表单(带有、选择、输入、范围框的表单)发送到后端并从沙过滤器自动生成 WHERE SQL 查询,并使用选定的值.
是否有任何 EF Core 功能,或者我必须在 FOREACH 中生成此查询,例如:
query = ...
foreach param_filter in
query = query.Where(...)
我有一个带有过滤器的 HTML 表单,它们的值是从 DB 生成的,每个网站页面都有不同的过滤器计数和类型,但每个过滤器都有一个唯一的字符串 ID
添加信息:
输入请求:
{
"name": "Application",
"values": [
{
"name": "Smart Homes & Cities | Industrial | Automotive | Security | Consumer",
"value": "Smart Homes & Cities | Industrial | Automotive | Security | Consumer"
}
],
"type": "select",
"field": "ant_application",
"sort": 4
}
我想获取带有过滤器数组的 REST API 请求,并为每个字段类型生成如下内容:
foreach (var f in filters)
query.Where(p => p.Field == p.field).AndValueNotIn(f.values);
其中p表示产品列表,其中每个产品都有自己的字段值
现在我在 EF Core DB 过程调用中使用如下:
.FromSqlInterpolated($"EXEC GetGroupFilters {groupId}").AsEnumerable()
MSSql 过程有唯一的 SQL(join、select、union),并从我加载到 Object 并使用 LINQ 的 DB 中返回格式化的行,我有 2 个选择:
- 使用 SQL WHERE 从过滤器生成原始文本并将其发送到过程中
- 使用 C# 在后端生成 LINQ .Where() 等
我认为选择 1 会更快更好,但仍然要找到最佳解决方案
有没有更好的解决方案?
【问题讨论】:
-
推荐看here
-
这真的很广泛。提供和规范输入的类型和含义。
-
@AluanHaddad 我在原始问题中添加了更多信息。
-
你可以简单地链接
Wheres:query.Where(...).Where(...).Where(...)。关于如何在运行时编写过滤查询有很多问题。 -
链接
Where语句是您想要的。这很简单。您可以使用谓词构建器构建谓词。这些都是之前已经讲过很多次的东西了。
标签: c# asp.net reactjs entity-framework-core