我想了解您使用F#和ORM工具的最佳体验。 F#+ LINQ 2 SQL有一些intricacies吗?
答案 0 :(得分:8)
在当前版本中,对LINQ的F#支持并不像在C#中那样流畅,但它可以很好地使用。我在实现F# Snippets Web时使用了F#+ LINQ to SQL,并且能够使用F#编写几乎所有内容。甚至还有一些很好的功能,你没有在C#中获得。
基本查询的语法基于引用的序列表达式:
let q = <@ seq { for c in db.Customers do
if c.Country = "UK" then yield c.Name } @>
F#中的一个好处是你可以使用引用拼接来重构你的代码:
let ukCustomers =
<@ seq { for c in db.Customers do
if c.Country = "OK" then yield c } @>
// Select names of all UK customers
let q = <@ seq { for c in %ukCustomers -> c.Name }
关于F#支持的限制:
我认为更新没有任何问题(如链接问题所暗示的那样)。
当前版本的最大限制可能是它对查询嵌套的支持有限(例如在Seq.filter
循环体内使用for
),但这应该是固定的PowerPack的下一个版本(事实上,如果你从源代码编译它,你可能已经得到它了)
如果您可以选择,我建议使用LINQ to SQL而不是LINQ to Entities。 LINQ to Entities对于不可变类型不能很好地工作,因此您无法轻松返回F#记录和F#元组。同样,这可能在未来有所改进(我最近做了一些工作,你可以在F#PowerPack源中找到初步支持)