如何在F#中编写FirstOrDefault Linq查询? 我可以完全使用linq到F#中的sql吗?
答案 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,请参阅
关于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