代码之家  ›  专栏  ›  技术社区  ›  user1206480

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

  •  2
  • user1206480  · 技术社区  · 9 年前

    我是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 回复  |  直到 9 年前
        1
  •  2
  •   Random Dev    9 年前

    如果你不翻译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))
    

    相反(抱歉-现在无法尝试)