f # конвертировать seq obj в записи seq - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь прочитать данные из базы данных и преобразовать их в последовательность записей.При выполнении

open FSharp.Data
open FSharp.Data.SqlClient


type foo = {name:int; author:int}

[<Literal>]
let query = "Select * from Authors"

[<Literal>]//DESKTOP-5RIV0K1
let connectionString = "Data Source=DESKTOP-5RIV0K1;Initial Catalog=TestBase;Integrated Security=True"

let cmd = new SqlCommandProvider<query,connectionString>(connectionString)

let result = cmd.Execute() |> printfn "%A"

result

я получаю

seq
  [{ AuthorID = 1; Name = Some "2" }; { AuthorID = 2; Name = Some "3" };
   { AuthorID = 3; Name = Some "4" }] 

Но когда я пытаюсь преобразовать seq obj в seq foo с кодом ниже

let result = 
    for item in cmd.Execute() do
    match item.Name, item.AuthorID with
        | Some itemName, Some itemAuthor ->
            {name = itemName; author = Some itemAuthor }
        | _ -> ()

я получаю ошибку

Некоторые itemAuthor

Ошибка FS0001 Это выражение, как ожидается, будет иметь тип 'int', но здесь имеет тип '' опция '

Что я делаюне так?

1 Ответ

1 голос
/ 27 апреля 2019

Вы пытаетесь сопоставить записи, которые выглядят следующим образом ...

{ AuthorID = 1; Name = Some "2" }

... используя шаблон, который выглядит следующим образом ...

| Some itemName, Some itemAuthor ->

Обратите внимание, что вашAuthorID является целым числом.Это не Option<int>.Следовательно, шаблон с двумя значениями Some несовместим.Вместо этого у вас должен быть такой шаблон ...

| Some itemName, itemAuthor ->
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...