Метода Firstordefault В F#

Как написать запрос FirstOrDefault Linq в F#? Могу ли я использовать linq to sql в F# полностью?

4 ответов


обратите внимание, что более идиоматический подход в F#, вероятно, будет использовать что-то вроде Seq.tryFind вместо того, чтобы использовать операторы LINQ, хотя это не падение замены, так как он возвращает значение опции.


потому что Seq модуль уже есть типа 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

Что касается LINQ-to-SQL, см.

http://blogs.msdn.com/dsyme/archive/2009/10/23/a-quick-refresh-on-query-support-in-the-f-power-pack.aspx

о 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# interactive,

firstordefault exampleList;;  
val it : int = 1