F# パワー パックを使用して引用符を 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 to 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 で設計どおりに機能していました。ただし、最新バージョンのパワーパックでは機能しなくなりました。私が受け取るエラーはMethod 'Boolean GenericEqualityIntrinsic[String](System.String, System.String)' has no supported translation to SQL. です。
パワーパックの変更点を調べたところ、新しいバージョンを使用して構築された linq 式は、プロパティの値を定数と比較するために GenericEqualityIntrinsic を使用しているようですが、バージョン 1.9.9.9 では String を使用していました。比較のための op_Equality。
これは問題の正しい理解ですか?新しいバージョンのパワー パックを使用して、引用符を linq 式に変換し、linq を sql に使用する ac# ライブラリで使用できるようにするにはどうすればよいですか?