5

与 C# 相比,这个问题更多地与 F# 的冗长和不太清晰有关。一个相对较小的问题,但随着我编写的数据库查询越多,这个问题就变得非常烦人。

在 C# 中,我可以使用 LINQ 和实体框架执行以下操作:

 var q = (from row in db.LAYERS
          where row.LIST1.Field1 == PARAM
          select new MyClass( row.field1, row.field2, row.field3, row.field4)).ToList()

重点在这里,我只是在查询本身内构建一个新的类列表。而在 F# 中这似乎不起作用,为了获得相同的结果,我正在做这样的事情:

    query { for row in db.LAYERS do 
        where (row.LIST1.Field1 = PARAM)
        select row.field1, row.field2, row.field3, row.field4 } 
        |> Seq.map (fun row -> new MyClass(row.field1, row.field2, row.field3, row.field4)

F# 要求我对查询序列进行映射以获取我想要的列表。

4

1 回答 1

6

尽管您没有提供无法编译的代码,但我猜您只需要将对象创建表达式放在括号中:

query { for row in db.LAYERS do 
        where (row.LIST1.Field1 = PARAM)
        select (new MyClass(row.field1, row.field2, row.field3, row.field4)) }
于 2013-04-01T16:04:37.057 回答