2

次のコードがあり、関数が の代わりに のgetCol1Col2タプルを返します。書き方は?これは初心者の質問です。Col1, Col2Linq.IQueryable<>

データベーステーブルに行が見つからない場合、どのように何も返さないのですか?

open System
open System.Data
open System.Data.Linq
open Microsoft.FSharp.Data.TypeProviders
open Microsoft.FSharp.Linq
open System.Net
open System.IO

type dbSchema = SqlDataConnection<"Data Source=server;Initial Catalog=db;Integrated Security=SSPI;">

let getFirstCol1Col2 =
    let db = dbSchema.GetDataContext()
    db.DataContext.Log <- System.Console.Out
    let query = query { 
        for row in db.MyTable do 
        where (row.ID = 1) 
        select (row.Col1, row.Col2) }
    query //.... Need to return the tuple of Col1, Col2
4

1 に答える 1

1

headOrDefault最初の結果またはデフォルト値を返す標準クエリ演算子があります。悲しいことに、tuple のデフォルト値はnull(私が思うに) になるので、これは安全ではありません。Noneオプション タイプのデフォルト値は次のとおりであるため、オプション タイプを返すことができます。

let query = 
  query { for row in db.MyTable do 
          where (row.ID = 1) 
          select (Some(row.Col1, row.Col2))
          headOrDefault }

または、この素敵な拡張機能を使用して、必要なことを正確に実行することもできます。行があるかどうheadOrNoneかを返します。Some(col1, col2)None

let query = 
  query { for row in db.MyTable do 
          where (row.ID = 1) 
          select (Some(row.Col1, row.Col2))
          headOrNone }
于 2013-09-06T00:07:07.710 に答える