Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查询动态参数。冒号_C#_Json_Asp.net Web Api_Mapping - Fatal编程技术网

C# 查询动态参数。冒号

C# 查询动态参数。冒号,c#,json,asp.net-web-api,mapping,C#,Json,Asp.net Web Api,Mapping,我对使用简洁的查询参数有点小问题 我有: WebApi接收包含所有必需数据(实体名称、列、筛选器等)的请求。最深层的过滤器具有此结构(此模型由ctor根据api模型构建): 公共类查询过滤器项 { 公共字符串名称{get;} 公共字符串字段名{get;} 公共对象值{get;} 公共ComparisonType ComparisonType{get;} } 查询执行器,处理api调用 var arguments=newexpandoobject(); // ... arguments.

我对使用简洁的查询参数有点小问题

我有:

  • WebApi接收包含所有必需数据(实体名称、列、筛选器等)的请求。最深层的过滤器具有此结构(此模型由ctor根据api模型构建):
公共类查询过滤器项
{
公共字符串名称{get;}
公共字符串字段名{get;}
公共对象值{get;}
公共ComparisonType ComparisonType{get;}
}
  • 查询执行器,处理api调用
var arguments=newexpandoobject();
// ...
arguments.TryAdd($“{filter.Name}实体{filter.FieldName}”,filter.Value);
// ... 上面的这部分是另一个helper类的一部分,该类动态构建过滤器查询数据
可数结果;
使用(var connection=DbConnectionFactory.CreateDbConnection())
{
result=connection.Query(sqlQuery,arguments);//尝试包装为DynamicParameters
}
从代码中,我得到了一个例外:

System.NotSupportedException: The member MyFilterItemEntityId 
of type System.Text.Json.JsonElement cannot be used as a parameter value
   at Dapper.SqlMapper.LookupDbType(Type type, String name, Boolean demand, ITypeHandler& handler) in /_/Dapper/SqlMapper.cs:line 418
   at Dapper.DynamicParameters.AddParameters(IDbCommand command, Identity identity) in /_/Dapper/DynamicParameters.cs:line 232
   at Dapper.DynamicParameters.Dapper.SqlMapper.IDynamicParameters.AddParameters(IDbCommand command, Identity identity) in /_/Dapper/DynamicParameters.cs:line 151
   at Dapper.SqlMapper.<>c__DisplayClass165_0.<GetCacheInfo>b__0(IDbCommand cmd, Object obj) in /_/Dapper/SqlMapper.cs:line 1714
   at Dapper.CommandDefinition.SetupCommand(IDbConnection cnn, Action`2 paramReader) in /_/Dapper/CommandDefinition.cs:line 129
   at Dapper.SqlMapper.<QueryImpl>d__140`1.MoveNext() in /_/Dapper/SqlMapper.cs:line 1080
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at Dapper.SqlMapper.Query[T](IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) in /_/Dapper/SqlMapper.cs:line 725
   at Dapper.SqlMapper.Query(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) in /_/Dapper/SqlMapper.cs:line 652
   at DappertStorageTest.Cqrs.SelectQueryHandler.GetByFilters(SelectQuery query)
   at DappertStorageTest.Cqrs.SelectQueryHandler.Handle(SelectQuery query)
   at System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 arg0, T1 arg1)
   at MAS.DappertStorageTest.Cqrs.Infrastructure.QueryProcessor.Execute[TResult](IQuery`1 query)
   at MAS.DapperStorageTest.Controllers.DataController.Select(SelectRequest selectRequest)
   at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<<InvokeActionMethodAsync>g__Logged|12_1>d.MoveNext()
System.NotSupportedException:成员MyFilterItemTityId
类型为System.Text.Json.JsonElement不能用作参数值
在/\uu/Dapper/SqlMapper.cs中的Dapper.SqlMapper.LookupDbType(类型类型、字符串名称、布尔需求、ITypeHandler和handler)处:第418行
在/\uu/Dapper/DynamicParameters.cs中的Dapper.DynamicParameters.AddParameters(IDbCommand,Identity Identity)处:第232行
在/\uu/Dapper/DynamicParameters.cs中的Dapper.DynamicParameters.Dapper.SqlMapper.IDynamicParameters.AddParameters(IDbCommand,Identity Identity)处:第151行
在/\u0/Dapper/SqlMapper.cs中的Dapper.SqlMapper.c_u显示Class165_0.b_u0(IDbCommand cmd,Object obj):第1714行
在/u/Dapper/CommandDefinition.cs中的Dapper.CommandDefinition.SetupCommand(IDbConnection cnn,Action`2 paramReader)处:第129行
在/u/Dapper/SqlMapper.cs中的Dapper.SqlMapper.d_u140`1.MoveNext()处:第1080行
位于System.Collections.Generic.List`1..ctor(IEnumerable`1集合)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
在/\u/Dapper/SqlMapper.cs中的Dapper.SqlMapper.Query[T](IDbConnection cnn,String sql,Object param,IDbTransaction transaction,Boolean buffered,Nullable`1 commandTimeout,Nullable`1 commandType):第725行
在/u/Dapper/SqlMapper.cs:第652行中的Dapper.SqlMapper.Query(IDbConnection cnn,String sql,Object param,IDbTransaction transaction,Boolean buffered,Nullable`1 commandTimeout,Nullable`1 commandType)处
在DapperStorageTest.Cqrs.SelectQueryHandler.GetByFilters(SelectQuery查询)
在DappertStorageTest.Cqrs.SelectQueryHandler.Handle(SelectQuery查询)
在System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](调用站点,T0 arg0,T1 arg1)
在MAS.DappertStorageTest.Cqrs.Infrastructure.QueryProcessor.Execute[TResult](IQuery`1查询)
在MAS.DapperStorageTest.Controllers.DataController.Select(SelectRequest SelectRequest)
位于Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(对象目标,对象[]参数)
位于Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncObjectResultExecutor.Execute(IActionResultTypeMapper映射器、ObjectMethodExecutor执行器、对象控制器、对象[]参数)
在Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.d.MoveNext()中
参数值(不属于异常的一部分):

sqlQuery:使用[DapperStorageTest];从[Passenger]中选择*,其中([Id]=@MyFilterItemTityId)

参数:{[MyFilterItemTityId,ValueKind=String:“7d570abd-576d-425f-9d24-d84314d299ba”}(原始)

有人能帮我吗?

谢谢你 web api模型映射引起的异常。根据api模型,筛选器值具有
对象
类型,asp.net核心将字符串映射到
JsonElement
。从
对象
切换到
字符串
类型

公共类查询过滤器项
{
公共字符串名称{get;}
公共字符串字段名{get;}
公共对象值{get;}//此处
公共ComparisonType ComparisonType{get;}
}

您是否正在尝试创建某种常规的“获取字符串和对象并运行简洁的查询并返回结果”方法?更多地解释你的用例?@CaiusJard是的。这是Select查询,将在外部调用(从另一个服务\或前端客户端)。案例很简单-提供对数据库的uni访问。客户端必须能够配置动态筛选器\筛选器组。比EF Repository.稍微复杂一点。它是
过滤器。Value
字符串
JsonElement
?@xanatos
过滤器。Value
是对象。请稍等,我将在中提供更多信息post@bodynar是和否
object x=“Hello”
x是一个
字符串
:-)。。。你能给我们打印一下filter.Value.GetType()