如何使用查询表达式正确 return 一系列 类?

How do I correctly return a sequence of classes with the query expression?

我是 F# 的新手,在翻译一些 C# 代码时遇到了问题。 我有一个 class 类似于:

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 或者至少如果您添加一个构造函数,就会容易得多。

例如,使用主构造函数应该可行:

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

相反(抱歉 - 现在不能真正尝试)