में फर्स्टऑर्डडिफॉल्ट F # में FirstOrDefault Linq क्वेरी कैसे लिखें? क्या मैं पूरी तरह से एफ # में एसक्यूएल के लिए linq का उपयोग कर सकता हूं?एफ #
एफ #
उत्तर
ध्यान दें कि एफ # के भीतर अधिक मुहावरेदार दृष्टिकोण होगा शायद LINQ ऑपरेटरों का उपयोग करने के बजाय Seq.tryFind
की लाइनों के साथ कुछ उपयोग करना होगा, हालांकि यह प्रतिस्थापन में गिरावट नहीं है क्योंकि यह लौटाता है एक विकल्प मूल्य।
,
FirstOrDefault
के बारे में देखते हैं, यह सिर्फ एक विस्तार methodSystem.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 ]
एफ # इंटरैक्टिव का उपयोग कर,
firstordefault exampleList;;
val it : int = 1
क्योंकि Seq
मॉड्यूल पहले से ही एक head
कार्य है seq<'a> -> 'a
टाइप करें, मैं हस्ताक्षर 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) F # 4.0 में जोड़ा गया है। –
मैं भी का उपयोग कर 'Seq.tryFind' की सिफारिश करेंगे - एफ # में, आप आमतौर पर उपयोग करते हुए aviod करने की कोशिश' null' मूल्य (क्योंकि वे खतरनाक हैं)। विकल्प विकल्प को संभालना आसान है क्योंकि आप 'Option.map' और उनके साथ काम करने के लिए अन्य फ़ंक्शंस का भी उपयोग कर सकते हैं (हालांकि, यह शायद F # LINQ से SQL में काम नहीं करेगा) –
हाँ, 'Seq.tryFind (fun _ -> true) 'महान काम करता है। –