Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
Linq 对F中的字符串使用小于比较运算符#_Linq_F#_Operators - Fatal编程技术网

Linq 对F中的字符串使用小于比较运算符#

Linq 对F中的字符串使用小于比较运算符#,linq,f#,operators,Linq,F#,Operators,我试图写一个F#查询,如下所示 let extract = query { for trade in Schema.Trade do where (trade.Year + trade.Month <= "202007") take 100 select (trade) } 因此,该部分在SQLProvider端不是问题 C#底层代码 让我重新表述一下我认为在封面下发生的事情。 对不起,

我试图写一个F#查询,如下所示

let extract = 
    query {
        for trade in Schema.Trade do
        where (trade.Year + trade.Month <= "202007")
        take 100
        select (trade)
    }
因此,该部分在SQLProvider端不是问题

C#底层代码 让我重新表述一下我认为在封面下发生的事情。 对不起,这只是我对问题的分析,我不想把事情搞混。不管怎么说,我想发生了如下事情(这是C#interactive)

表达式ex1=()=>“202006”;; >表达式ex2=()=>“202005”;; >表达式.GreaterThan(ex1.Body,ex2.Body);; System.InvalidOperationException:L'operatore binario大于每i tipi的非定义'System.String'e'System.String'。 +System.Linq.Expressions.Expression.GetUserDefinedBinaryOperatorOrThrow(System.Linq.Expressions.ExpressionType,string,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,bool) +System.Linq.Expressions.Expression.GreaterThan(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,bool,System.Reflection.MethodInfo) 堆栈跟踪 这是来自上述F#程序的真实、完整的堆栈跟踪

L'operatore binario lessthanorequired nonèdefinito per i tipi'System.String'e'System.String'。在System.Linq.Expressions.Expression.GetUserDefinedBinaryOperatorOrThrow(ExpressionType binaryType,字符串名称,表达式左,表达式右,布尔liftToNull)中
在System.Linq.Expressions.Expression.LessThanOrEqual中(表达式左、表达式右、布尔liftToNull、MethodInfo方法)
在Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter中。ConvExprToLinqInContext@512-7.调用(Tuple`2 tupledArg)
在F:\workspace\\u work\1\s\src\FSharp\FSharp.Core\Linq.fs:riga 512中的Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.Converter.ConvExportolinqinContext(ConvEnv env,FSharpExpr inp)中
在F:\workspace\\u work\1\s\src\FSharp\FSharp.Core\Linq.fs:riga 734中的Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.Converter.ConvExportolinqinContext(ConvEnv env,FSharpExpr inp)中
在f:\workspace\\u work\1\s\src\FSharp\FSharp.Core\local.fs中的Microsoft.FSharp.Primitives.Basics.List.mapToFreshConsTail[a,b](FSharpList`1 cons,FSharpFunc`2 f,FSharpList`1 x)中
在F:\workspace\\u work\1\s\src\FSharp\FSharp.Core\local.fs中的Microsoft.FSharp.Primitives.Basics.List.map[T,TResult](FSharpFunc`2映射,FSharpList`1 x)中
在F:\workspace\\u work\1\s\src\FSharp\FSharp.Core\Linq.fs:riga 820中的Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.ConvExprsToLinq(ConvEnv env,FSharpList`1 es)中
在F:\workspace\\u work\1\s\src\FSharp\FSharp.Core\Linq.fs:riga 642中的Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.Convertext(ConvEnv env,FSharpExpr inp)中
在F:\workspace\\u work\1\s\src\FSharp\FSharp.Core\local.fs中的Microsoft.FSharp.Primitives.Basics.List.map[T,TResult](FSharpFunc`2映射,FSharpList`1 x)中
在F:\workspace\\u work\1\s\src\FSharp\FSharp.Core\Linq.fs:riga 820中的Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.ConvExprsToLinq(ConvEnv env,FSharpList`1 es)中
在F:\workspace\\u work\1\s\src\FSharp\FSharp.Core\Linq.fs:riga 642中的Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.Convertext(ConvEnv env,FSharpExpr inp)中
在F:\workspace\\u work\1\s\src\FSharp\FSharp.Core\Linq.fs:riga 734中的Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.Converter.ConvExportolinqinContext(ConvEnv env,FSharpExpr inp)中
在F:\workspace\\u work\1\s\src\FSharp\FSharp.Core\Linq.fs中的Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.EvaluateQuotes(FSharpExpr e)中
在F:\workspace\\u work\1\s\src\FSharp\FSharp\FSharp.Core\Query.fs:riga 1823中的Microsoft.FSharp.Linq.QueryModule.EvalNonNestedInner(CanEliminate canElim,FSharpExpr QueryProducing Sequence)中
在Microsoft.FSharp.Linq.QueryModule中。clo@1926-1.Microsoft FSharp Linq ForwarderyMethods在F:\workspace\\u work\1\s\src\FSharp\FSharp.Core\Query.fs:riga 1928中执行[a,b](FSharpExpr`1 q)
在C:\FunctionalCmd\Program.fs中的Program.main(字符串[]argv)中:riga 23System.InvalidOperationException:L'operator binario LessThanOrEqual nonèdefinito per i tipi'System.String'e'System.String'。
在System.Linq.Expressions.Expression.GetUserDefinedBinaryOperatorOrThrow(ExpressionType binaryType,字符串名称,表达式左,表达式右,布尔liftToNull)中
在System.Linq.Expressions.Expression.LessThanOrEqual中(表达式左、表达式右、布尔liftToNull、MethodInfo方法)
在Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter中。ConvExprToLinqInContext@512-7.调用(Tuple`2 tupledArg)
在F:\workspace\\u work\1\s\src\FSharp\FSharp.Core\Linq.fs:riga 512中的Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.Converter.ConvExportolinqinContext(ConvEnv env,FSharpExpr inp)中
在F:\workspace\\u work\1\s\src\FSharp\FSharp.Core\Linq.fs:riga 734中的Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.Converter.ConvExportolinqinContext(ConvEnv env,FSharpExpr inp)中
在f:\workspace\\u work\1\s\src\FSharp\FSharp.Core\local.fs中的Microsoft.FSharp.Primitives.Basics.List.mapToFreshConsTail[a,b](FSharpList`1 cons,FSharpFunc`2 f,FSharpList`1 x)中
在F:\workspace\\u work\1\s\src\FSharp\FSharp.Core\local.fs中的Microsoft.FSharp.Primitives.Basics.List.map[T,TResult](FSharpFunc`2映射,FSharpList`1 x)中
在F:\workspace\\u work\1\s\src\FSharp\FSharp.Core\Linq.fs:riga 820中的Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.ConvExprsToLinq(ConvEnv env,FSharpList`1 es)中
在F:\workspace\\u work\1\s\src\FSharp\FSharp.Core\Linq.fs:riga 642中的Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.Convertext(ConvEnv env,FSharpExpr inp)中
在F:\workspace\\u work\1\s\src\FSharp\FSharp.Core\local.fs中的Microsoft.FSharp.Primitives.Basics.List.map[T,TResult](FSharpFunc`2映射,FSharpList`1 x)中
在Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.Co中
CONCAT(`trade`.`year`, `trade`.`month`)
> Expression<Func<String>> ex1 = () => "202006";;
> Expression<Func<String>> ex2 = () => "202005";;
> Expression.GreaterThan(ex1.Body, ex2.Body);;
System.InvalidOperationException: L'operatore binario GreaterThan non è definito per i tipi 'System.String' e 'System.String'.
  + System.Linq.Expressions.Expression.GetUserDefinedBinaryOperatorOrThrow(System.Linq.Expressions.ExpressionType, string, System.Linq.Expressions.Expression, System.Linq.Expressions.Expression, bool)
  + System.Linq.Expressions.Expression.GreaterThan(System.Linq.Expressions.Expression, System.Linq.Expressions.Expression, bool, System.Reflection.MethodInfo)
</ExceptionType><Message>L'operatore binario LessThanOrEqual non è definito per i tipi 'System.String' e 'System.String'.</Message><StackTrace>   in System.Linq.Expressions.Expression.GetUserDefinedBinaryOperatorOrThrow(ExpressionType binaryType, String name, Expression left, Expression right, Boolean liftToNull)
   in System.Linq.Expressions.Expression.LessThanOrEqual(Expression left, Expression right, Boolean liftToNull, MethodInfo method)
   in Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.ConvExprToLinqInContext@512-7.Invoke(Tuple`2 tupledArg)
   in Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.ConvExprToLinqInContext(ConvEnv env, FSharpExpr inp) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\Linq.fs:riga 512
   in Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.ConvExprToLinqInContext(ConvEnv env, FSharpExpr inp) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\Linq.fs:riga 734
   in Microsoft.FSharp.Primitives.Basics.List.mapToFreshConsTail[a,b](FSharpList`1 cons, FSharpFunc`2 f, FSharpList`1 x) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\local.fs:riga 241
   in Microsoft.FSharp.Primitives.Basics.List.map[T,TResult](FSharpFunc`2 mapping, FSharpList`1 x) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\local.fs:riga 252
   in Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.ConvExprsToLinq(ConvEnv env, FSharpList`1 es) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\Linq.fs:riga 820
   in Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.ConvExprToLinqInContext(ConvEnv env, FSharpExpr inp) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\Linq.fs:riga 642
   in Microsoft.FSharp.Primitives.Basics.List.map[T,TResult](FSharpFunc`2 mapping, FSharpList`1 x) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\local.fs:riga 250
   in Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.ConvExprsToLinq(ConvEnv env, FSharpList`1 es) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\Linq.fs:riga 820
   in Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.ConvExprToLinqInContext(ConvEnv env, FSharpExpr inp) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\Linq.fs:riga 642
   in Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.ConvExprToLinqInContext(ConvEnv env, FSharpExpr inp) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\Linq.fs:riga 734
   in Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.EvaluateQuotation(FSharpExpr e) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\Linq.fs:riga 844
   in Microsoft.FSharp.Linq.QueryModule.EvalNonNestedInner(CanEliminate canElim, FSharpExpr queryProducingSequence) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\Query.fs:riga 1823
   in Microsoft.FSharp.Linq.QueryModule.clo@1926-1.Microsoft-FSharp-Linq-ForwardDeclarations-IQueryMethods-Execute[a,b](FSharpExpr`1 q) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\Query.fs:riga 1928
   in Program.main(String[] argv) in C:\FunctionalCmd\Program.fs:riga 23</StackTrace><ExceptionString>System.InvalidOperationException: L'operatore binario LessThanOrEqual non è definito per i tipi 'System.String' e 'System.String'.
   in System.Linq.Expressions.Expression.GetUserDefinedBinaryOperatorOrThrow(ExpressionType binaryType, String name, Expression left, Expression right, Boolean liftToNull)
   in System.Linq.Expressions.Expression.LessThanOrEqual(Expression left, Expression right, Boolean liftToNull, MethodInfo method)
   in Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.ConvExprToLinqInContext@512-7.Invoke(Tuple`2 tupledArg)
   in Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.ConvExprToLinqInContext(ConvEnv env, FSharpExpr inp) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\Linq.fs:riga 512
   in Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.ConvExprToLinqInContext(ConvEnv env, FSharpExpr inp) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\Linq.fs:riga 734
   in Microsoft.FSharp.Primitives.Basics.List.mapToFreshConsTail[a,b](FSharpList`1 cons, FSharpFunc`2 f, FSharpList`1 x) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\local.fs:riga 241
   in Microsoft.FSharp.Primitives.Basics.List.map[T,TResult](FSharpFunc`2 mapping, FSharpList`1 x) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\local.fs:riga 252
   in Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.ConvExprsToLinq(ConvEnv env, FSharpList`1 es) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\Linq.fs:riga 820
   in Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.ConvExprToLinqInContext(ConvEnv env, FSharpExpr inp) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\Linq.fs:riga 642
   in Microsoft.FSharp.Primitives.Basics.List.map[T,TResult](FSharpFunc`2 mapping, FSharpList`1 x) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\local.fs:riga 250
   in Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.ConvExprsToLinq(ConvEnv env, FSharpList`1 es) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\Linq.fs:riga 820
   in Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.ConvExprToLinqInContext(ConvEnv env, FSharpExpr inp) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\Linq.fs:riga 642
   in Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.ConvExprToLinqInContext(ConvEnv env, FSharpExpr inp) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\Linq.fs:riga 734
   in Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.EvaluateQuotation(FSharpExpr e) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\Linq.fs:riga 844
   in Microsoft.FSharp.Linq.QueryModule.EvalNonNestedInner(CanEliminate canElim, FSharpExpr queryProducingSequence) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\Query.fs:riga 1823
   in Microsoft.FSharp.Linq.QueryModule.clo@1926-1.Microsoft-FSharp-Linq-ForwardDeclarations-IQueryMethods-Execute[a,b](FSharpExpr`1 q) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\Query.fs:riga 1928
   in Program.main(String[] argv) in C:\FunctionalCmd\Program.fs:riga 23</ExceptionString></Exception></TraceRecord>
Eccezione non gestita di tipo 'System.InvalidOperationException' in FSharp.Core.dll
L'operatore binario LessThanOrEqual non è definito per i tipi 'System.String' e 'System.String'.
let extract = 
    query {
        for trade in Schema.Trade do
        where (int trade.Year < 2020 || 
          (int trade.Year = 2020 && int trade.Month <= 7))
        take 100
        select (trade)
    }
| ExpressionType.GreaterThan,        (:? BinaryExpression as ce) -> Some (ConditionOperator.GreaterThan,  ce.Left,ce.Right)