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#库可以使用这些表达式?
没有找到相关结果
已邀请:
2 个回复
暑袜眠退
工作?
穗揣