1
APIからデータをロードしていますが、特定のフィールドの値はNULL
です。データ(オブジェクト)をリストにロードした後、リスト全体を反復して、SQLProviderを使用して各オブジェクトをデータベースに格納します。F#SQLProvider - フィールドにNULL値を代入する
for x in myList do
let item = db.Dbo.Item.Create()
item.Name <- x.Name
item.Description <- x.Description // Description might be NULL
db.SubmitUpdates()
ただし、すべてのクエリパラメータ値が提供されないというエラーが表示されて失敗します。
これを回避するには以下のようにしますが、多くの列があるテーブルでは面倒です。
if x.Description |> isNull |> not then
item.Description <- x.Description
このヌルチェックを回避する方法はありますか?
ここでは配管が少し過剰だと思います。 'そうでなければ(isNull xx)then(doSomething with xx)'は目では簡単です。しかし、あなたが試みることのできるアプローチのいくつかは、1. filter myListにnull xが含まれないようにします。2. SQLproviderを使用する場合、Optionalsオプションをオンにしてみてください。/None、次にList.chooseを選択して、Some値をフィルタリングしてマップすることができます。 – s952163
@ s952163フィルタリングは実際には受け入れられません。私は何十もの列を扱っており、それらのほとんどはnull可能である可能性があります。いくつかの列に値が存在しない場合は有効なシナリオであり、ソース・フィールドからターゲットDB列にデータを取得するだけで済みます。 – Anil
他の質問に記載されている 'useOpTypes = true'パラメータが役に立つかもしれません。私は多くのデータをヌル可能な列にロードします。どのように扱うかは、どこから来るのか、データが実際にヌル可能であれば '.GetValueOrDefault()'を使うことができるので、 'x.Description.GetValueOrDefault()' onそれには 'Uncheked.defaultof <_>'もあります。理想的には、それはDTOの世話をするでしょう。 – s952163