Как правильно вернуть последовательность классов с выражением запроса?
Я новичок в 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))
вместо этого (извините - не могу попробовать прямо сейчас)