F#中的FirstOrDefault

Sha*_*lan 10 f# linq-to-sql

如何在F#中编写FirstOrDefault Linq查询?我可以完全使用linq到F#中的sql吗?

kvb*_*kvb 14

请注意,F#中更惯用的方法可能是使用某些内容Seq.tryFind而不是使用LINQ运算符,尽管它不是替代品,因为它返回一个选项值.


Tah*_*san 9

因为Seq模块已经具有head类型的函数seq<'a> -> 'a,我将定义一个tryHead带签名的函数seq<'a> -> option<'a>:

module Seq =
    let tryHead (ls:seq<'a>) : option<'a>  = ls |> Seq.tryPick Some
Run Code Online (Sandbox Code Playgroud)

用它作为:

[1; 2; 3] |> Seq.tryHead
Run Code Online (Sandbox Code Playgroud)

  • 从那以后,在f#4.0中添加了`tryHead`(https://github.com/Microsoft/visualfsharp/commit/b10392dc16593bf9286583e2a87217d18fa18b8a). (4认同)

Bri*_*ian 5

关于 LINQ-to-SQL,请参阅

http://blogs.msdn.com/dsyme/archive/2009/10/23/a-quick-refresh-on-query-support-in-the-f-power-pack.aspx

对于 来说FirstOrDefault,它只是命名空间中的一个扩展方法System.Linq

let l = [1;2;3]
open System.Linq 
let r = l.FirstOrDefault()
Run Code Online (Sandbox Code Playgroud)