2017-07-18 8 views
2

LinqPadを使用してテーブル内のエンティティをコピーしようとしています。レコード式のコピーと更新が機能しない

let dc = new TypedDataContext() 
let title = "Some title" 

let newestUser= dc.UserIDs |> Seq.filter (fun(x)->x.Funktion="SomeFunction") |> Seq.last 

let newUser= {newestUserwith Title= title} 

型 'ユーザーID' フィールド 'タイトル'

が含まれているが、タイトルが公共の場ではありません。 GetFields()を使用してリストに表示されています

その理由は何ですか?

+0

作成したシンボルにタイプを注釈付けしてみます。 'newestUset'はどんなタイプですか?そのタイプの定義を表示できますか? 'タイトル'はどのタイプのフィールドですか? –

+0

こんにちは@BartekKobyłeckiタイトルは文字列であり、エンティティの定義はDataContext(LinqPadを使用し、UserIDsはテーブル)から来ます – user278618

+0

'with'が動作します。コンパイルエラーが発生した場合は、間違ったタイプを使用しているか、テーブルにそのデータベースフィールドがありません。最小、*完全*および*再現可能な例を投稿してください。投稿した内容が完全ではありません(種類がありません)、再現性がありません –

答えて

6

withキーワードは、F# recordsのコピーと更新に使用されます。レコードは、値を含み、内部状態がなく、簡単にコピーできるフィールドのダムセットです。指定されたオブジェクトをコピーする方法が定義されていないため、通常のオブジェクトでは機能しません。

通常のオブジェクトでこの構文を使用しようとしたときにF#によって表示されるエラーメッセージはThe record label 'Title' is not definedです。もしそれが'newestUser' is not a recordだったらもっと役に立つでしょう。

関連する問題