#.net #f# #m
#.net #f# #m
Вопрос:
Как мне создать функцию для поиска в базе данных и возвращать только идентификатор типа?
На самом деле, у меня есть база данных, где я могу искать пару. Пара — это тип, в F#:
module Types =
[<CLIMutable>]
type Pair = {
Id :int64
PairName : string
}
Моя цель — создать функцию, которая возвращает только значение идентификатора (int) с заданным именем пары. У меня уже есть функция, которая возвращает пару с таким именем.
module Query =
let GetSingleByName name = querySingleAsync<Types.Bird> {
script "SELECT * FROM Pair WHERE PairName = @Name LIMIT 1"
parameters (dict ["Name", box name])
}
Как я могу вернуть только целое число? Не все Type.Pair?
Ответ №1:
let getIdByName name = querySingleAsync<int64> {
script "SELECT Id FROM Pair WHERE PairName = @Name LIMIT 1"
parameters (dict ["Name", box name])
}
если это не сработает, вам придется предоставить определение querySingleAsync
.
В качестве альтернативы:
let getIdByName name = async {
let! single = getSingleByName name
return single |> Option.map (fun pair -> pair.Id)
}
Ответ №2:
Одно из решений, которое я обнаружил, было:
let GetSingleByName name = querySingleAsync<Types.Pair> {
script "SELECT * FROM Pair WHERE PairName = @Name LIMIT 1"
parameters (dict ["Name", box name])
}
let GetIdByName (name:string) = match GetSingleByName name |> Async.RunSynchronously with
| Some(pair)-> pair.Id
| None -> 0 |> int64
Комментарии:
1. Отбрасывание невероятно полезного параметра type, по умолчанию None равно 0, является бельмом на глазу… Используйте
Option.map (fun pair -> pair.Id)