Linq to sql F中的FirstOrDefault#

Linq to sql F中的FirstOrDefault#,linq-to-sql,f#,Linq To Sql,F#,如何在F#中编写FirstOrDefault Linq查询? 我可以在F#in中使用linq to sql吗?关于linq to sql,请参阅 关于FirstOrDefault,它只是系统中的一个扩展。Linq名称空间: let l = [1;2;3] open System.Linq let r = l.FirstOrDefault() 请注意,F#中更惯用的方法可能是使用类似于Seq.tryFind的内容,而不是使用LINQ运算符,尽管它不是一个替换,因为它返回一个选项值。或者,您可

如何在F#中编写FirstOrDefault Linq查询?
我可以在F#in中使用linq to sql吗?

关于linq to sql,请参阅

关于
FirstOrDefault
,它只是
系统中的一个扩展。Linq
名称空间:

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

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

或者,您可以轻松定义自己的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

因为
Seq
模块已经具有
head
类型的
Seq
功能:


我还建议使用
Seq.tryFind
——在F#中,通常会尝试避免使用
null
值(因为它们很危险)。处理选项值更容易,因为您还可以使用
选项。映射
和其他用于处理选项值的函数(不过,这在F#LINQ to SQL中可能不起作用),因为F#4.0中添加了
tryHead
()。
module Seq =
    let tryHead (ls:seq<'a>) : option<'a>  = ls |> Seq.tryPick Some
[1; 2; 3] |> Seq.tryHead