如何在F#中编写FirstOrDefault Linq查询? 我可以完全在F#中使用linq to sql吗?
如何在F#中编写FirstOrDefault Linq查询? 我可以完全在F#中使用linq to sql吗?
请注意,在F#中更为惯用的方法可能是使用类似于Seq.tryFind
的东西,而不是使用LINQ操作符,尽管它不是一个简单的替换,因为它返回一个选项值。
由于Seq
模块已经拥有类型为seq<'a> -> 'a
的head
函数,因此我会定义一个带有签名seq<'a> -> option<'a>
的tryHead
函数:
module Seq =
let tryHead (ls:seq<'a>) : option<'a> = ls |> Seq.tryPick Some
将其用作:
[1; 2; 3] |> Seq.tryHead
tryHead
函数(https://github.com/Microsoft/visualfsharp/commit/b10392dc16593bf9286583e2a87217d18fa18b8a)。 - Mark Vincze关于 FirstOrDefault
,它只是 System.Linq
命名空间中的一个扩展 方法:
let l = [1;2;3]
open System.Linq
let r = l.FirstOrDefault()
另外,您可以轻松地定义自己的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
Seq.tryFind
- 在F#中,通常要避免使用null
值(因为它们很危险)。处理选项值更容易,因为您还可以使用Option.map
和其他函数来处理它们(尽管这可能在F# LINQ to SQL中不起作用)。 - Tomas Petricek