次のような一般的なクエリ関数を使用したい:
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 }