F#中的FirstOrDefault

时间:2010-05-06 20:34:09

标签: linq-to-sql f#

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

4 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:8)

由于Seq模块已经有head类型的seq<'a> -> 'a函数,我会定义一个带有签名tryHead的函数seq<'a> -> option<'a>

module Seq =
    let tryHead (ls:seq<'a>) : option<'a>  = ls |> Seq.tryPick Some

将其用作:

[1; 2; 3] |> Seq.tryHead

答案 2 :(得分:4)

关于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命名空间中的扩展method

let l = [1;2;3]
open System.Linq 
let r = l.FirstOrDefault()

答案 3 :(得分:3)

或者,您可以轻松定义自己的firstordefault:

let firstordefault list =
   match list with
   | head :: tail -> head 
   | [] -> 0 // some default value

示例:

let exampleList = [ 1; 2; 3 ]

使用F#interactive,

firstordefault exampleList;;  
val it : int = 1