gpt4 book ai didi

c# - ASP.NET 5 Web 项目中的 Entity Framework Core - 自动生成 LINQ 过滤器查询

转载 作者:行者123 更新时间:2023-12-04 11:14:18 24 4
gpt4 key购买 nike

我有 .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 表单,它们的值是从数据库生成的,每个网站页面都有另一个过滤器的数量和类型,但每个过滤器都有一个唯一的字符串 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(连接、选择、联合),并从我加载到对象中并使用 LINQ 的 DB 返回格式化的行,我有两个选择:
  • 使用 从过滤器生成原始文本SQL WHERE 并将其发送到程序
  • 生成 LINQ .Where() 等在后端与 C#

  • 我认为然后选择 1 会更快更好,但仍然找到最佳解决方案
    有没有更好的解决办法?

    最佳答案

    其实我做过这样的事
    我推荐您了解 表达式树 Linq.Expression 作为下面的链接,我先实现此操作,然后才能在此 link 中找到您的问题答案
    但为了更多地了解如何实现这一点,我放了一些 示例 代码如下:

         // Comment   _Queryable.Where(x=>x.Something) | This Queryable from 
    // Type Of Generics (Where Any model With Any Field With This)
    var query = Expression.Equal(Expression.Property(keyParameter, filter.Key),
    Expression.Constant(filter.Value));
    MethodCallExpression whereExpression = Expression.Call(
    typeof(Queryable),
    "Where",
    new Type[] {_queryable.ElementType},
    _queryable.Expression,
    Expression.Lambda<Func<T, bool>>(query, new
    ParameterExpression[] {keyParameter}));
    _queryable =
    _queryable.Provider.CreateQuery<T(whereExpression);
    对不起,我的英语不好 希望对您有所帮助

    关于c# - ASP.NET 5 Web 项目中的 Entity Framework Core - 自动生成 LINQ 过滤器查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65952916/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com