F#中的FirstOrDefault

13

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

4个回答

17

请注意,在F#中更为惯用的方法可能是使用类似于Seq.tryFind的东西,而不是使用LINQ操作符,尽管它不是一个简单的替换,因为它返回一个选项值。


1
我还建议使用Seq.tryFind - 在F#中,通常要避免使用null值(因为它们很危险)。处理选项值更容易,因为您还可以使用Option.map和其他函数来处理它们(尽管这可能在F# LINQ to SQL中不起作用)。 - Tomas Petricek

13

由于Seq模块已经拥有类型为seq<'a> -> 'ahead函数,因此我会定义一个带有签名seq<'a> -> option<'a>tryHead函数:

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

将其用作:

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

7
自此,F# 4.0中添加了tryHead函数(https://github.com/Microsoft/visualfsharp/commit/b10392dc16593bf9286583e2a87217d18fa18b8a)。 - Mark Vincze

5

3

另外,您可以轻松地定义自己的firstordefault:

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

例子:

let exampleList = [ 1; 2; 3 ]

使用 F# 交互环境,

firstordefault exampleList;;  
val it : int = 1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接