在当前版本中,对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 } @>
Run Code Online (Sandbox Code Playgroud)
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 }
Run Code Online (Sandbox Code Playgroud)
关于F#支持的局限性:
我认为更新没有任何问题(如链接问题所暗示的那样).
也许当前版本的最大限制是它对查询嵌套的支持有限(例如使用循环Seq.filter体内for),但这应该在下一版本的PowerPack中修复(事实上,如果你从源代码编译它,你可能已经得到它)
如果您可以选择,我建议使用LINQ to SQL而不是LINQ to Entities.LINQ to Entities对于不可变类型不能很好地工作,因此您无法轻松返回F#记录和F#元组.再次,这可能在未来有所改进(我最近做了一些工作,你可以在F#PowerPack源中找到初步支持)