与 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# 要求我对查询序列进行映射以获取我想要的列表。