Как правильно вернуть последовательность классов с выражением запроса?

Я новичок в F# и возникают проблемы с переводом кода C#. У меня есть класс, похожий на этот:

type car () =
    member val Model = "" with get,set
    member val Year = "" with get,set

У меня есть это выражение запроса, который извлекает данные автомобиля из базы данных:

query{
    for row in db do
    select // <-- what is the correct syntax to create a sequence of new car 
           //    classes here
}

1 ответ

Решение

Это намного проще, если вы не переводите 1:1 или, по крайней мере, если вы добавляете конструктор.

Например, используя первичный конструктор, это должно работать:

type Car (model, year) =
   member __.Model with get() = model
   member __.Year with get() = year

query {
   for row in db do
   select (Car (row.Model, row.Year))
}

Теперь, конечно, я не знаю, как строки в вашем db выглядит, и это даст вам неизменные данные - но для того, что я вижу, должно быть хорошо


Я только что понял, что это может быть проблемой (так же, как в C#), поскольку ctor, вероятно, не может быть переведен в SQL-оператор - вы все еще можете попробовать, но я думаю, вам действительно нужно сделать

query {
   for row in db do
   select 
} |> Seq.map (fun row -> Car (row.Model, row.Year))

вместо этого (извините - не могу попробовать прямо сейчас)

Другие вопросы по тегам