Как получить идентификатор поля в типе F#

#.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)