3

次のような一般的なクエリ関数を使用したい:

let filter predicateFn =
    predicateFn |>
    fun f s -> query { for x in s do 
                       where (f(x)) 
                       select x }

f は述語関数でなければなりません。明らかに、これは SQL クエリに変換できません。しかし、この問題の解決策はありますか。C# のサンプル ソリューションを見てきました。

アプローチ元: Daniel Mohl による F# を使用した Web、クラウド、およびモバイル ソリューション。

編集:明確にする例:

let userSorter = fun (u:users) -> u.Login

let sorted  =
    query { for user in dbConn.GetDataContext().Users do 
                sortBy ((fun (u:users) -> u.Login)(user))
                select user.Login }

基本的に、ラムダを userSorter に置き換えたいと思います。上記のコードはそのまま実行されますが、これは失敗します。

let userSorter = fun (u:users) -> u.Login

let sorted  =
    query { for user in dbConn.GetDataContext().Users do 
                sortBy (userSorter(user))
                select user.Login }
4

1 に答える 1