请教关于动态查询的select的写法 返回

SqlSugar 沟通中
2 589

image.png

上面执行报错:

Exception has been thrown by the target of an invocation.
 ---> Syntax error (at index 79)
   at System.Linq.Dynamic.Core.Tokenizer.TextParser.ValidateToken(TokenId tokenId, String errorMessage)
   at System.Linq.Dynamic.Core.Parser.ExpressionParser.Parse(Type resultType, Boolean createParameterCtor)
   at System.Linq.Dynamic.Core.DynamicExpressionParser.ParseLambda(Type delegateType, ParsingConfig parsingConfig, Boolean createParameterCtor, ParameterExpression[] parameters, Type resultType, String expression, Object[] values)
   at System.Linq.Dynamic.Core.DynamicExpressionParser.ParseLambda(ParsingConfig parsingConfig, Boolean createParameterCtor, ParameterExpression[] parameters, Type resultType, String expression, Object[] values)
   at System.Linq.Dynamic.Core.DynamicExpressionParser.ParseLambda(ParsingConfig parsingConfig, ParameterExpression[] parameters, Type resultType, String expression, Object[] values)
   at InvokeStub_DynamicExpressionParser.ParseLambda(Object, Span`1)
   at System.Reflection.MethodBaseInvoker.InvokeWithManyArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   --- End of inner exception stack trace ---
   at System.Reflection.MethodBaseInvoker.InvokeWithManyArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at SqlSugar.SqlSugarDynamicExpressionParser.ParseLambda(ParameterExpression[] parameterExpressions, Type type, String sql, Object[] objects)
   at SqlSugar.DynamicCoreHelper.GetMember(Type entityType, Type propertyType, String shortName, FormattableString memberSql)
   at SqlSugar.QueryableProvider`1.Select[TResult](String expShortName, FormattableString expSelect, Type resultType)
   at SqlSugar.QueryableProvider`1.Select(String expShortName, FormattableString expSelect, Type resultType)
=>


因为 Entity的属性名和 字段名不一样 Entity的属性带有SugarColumn(columnname="xxxx") , 所以 直接写字符串或selectmodle的重载版本需要用字段名的. 上面反射获取的是属性名, 所以希望用动态查询的重载版本.


查看文档的写法是new(参数)的? 参数里面 还可以写as 这样的? 是什么原理啊?

//方式3: 动态表达式 
StaticConfig.DynamicExpressionParserType = typeof(DynamicExpressionParser); //启动时配置

 

var list= db.Queryable<Order>().Select("it", $"it=>new(it.Id as Id, it.Name)"typeof(Order)).ToList();

 

//需要SqlFunc:https://www.donet5.com/Home/Doc?typeId=2569


热忱回答2

  • fate sta fate sta VIP0
    2025/12/22

    以文档为准

    0 回复
  • 抱走 抱走 VIP0
    2025/12/22

    @fate sta:按文档的写法确实可以了, 感谢 , 这个动态的查询语法格式是不是固定 it=>new(  ...  )  , ... 是按sql的写法, 不过用形参.属性 代替 是吗?

    0 回复