F#Power Pack Linq问题

| 我有一个简单的函数,该函数利用F#power pack将引号转换为linq表达式。该函数是:
let toLinq (exp : Expr<\'a -> \'b>) =
    let linq = exp.ToLinqExpression()
    let call = linq :?> MethodCallExpression
    let lambda = call.Arguments.[0] :?> LambdaExpression
    Expression.Lambda<Func<\'a, \'b>>(lambda.Body, lambda.Parameters)
我使用此函数创建由linq到sql查询数据库的C#库使用的表达式。例如,我可以构建一个表达式,例如:
    let test = toLinq (<@fun u -> u.FirstName = \"Bob\"@> : Expr<Account->bool>)
并将其传递给类似这样的方法:
public IEnumerable<T> Find(Expression<Func<T, bool> predicate)
{
        var result = Table.OfType<T>();         
        result = result.Where(predicate)                                    
        var resultArray = result.ToArray();            
        return resultArray;
}
这是按照电源包的1.9.9.9版中的设计进行的。但是,它在最新版本的电源中不再起作用。我收到的错误是方法\'Boolean GenericEqualityIntrinsic [String](System.String,System.String)\'没有支持的SQL转换。 我看了一下对Power Pack的更改,似乎使用新版本构建的linq表达式利用GenericEqualityIntrinsic将属性的值与常量进行比较,而在1.9.9.9版本中,它使用了比较的String.op_Equality。 这是对问题的正确理解吗?我如何利用新版本的Power Pack将报价转换为linq表达式,而使用linq到sql的c#库可以使用这些表达式?     
已邀请:
        是否明确调用
System.String.op_Equality(s1,s2)
工作?     
        您可以尝试以下报价:
<@fun u -> u.FirstName.Equals(\"Bob\")@>
    

要回复问题请先登录注册