Linq to sql F中的FirstOrDefault#
如何在F#中编写FirstOrDefault Linq查询?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#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