2016-05-13 10 views
1

LINQとEntity Frameworkを操作するときの奇妙さを比較します。 DBからIDを取得したいのですが、私はこの奇妙なメッセージを受け取ります。VB.NET LINQメソッドの構文では、暗黙の変換が '整数'から禁止されています。 〜Integer '

私はあなたが見ることができるようにそれを修正することができましたが、私はを理解してを理解したいと思います。

質問

は、なぜ私が「hasValueは」で確認するか、私は「FirstOrDefault」を使用している場合でも、このエラーメッセージを得るのですか?私の意見ではnullにはできませんが、私は明らかに何かを見逃しています。あなたはInteger?が値を持っている100%確信している場合

Code and Error

+0

実際のコードで貼り付けてください。スクリーンショットはうまく動作しません。 –

+0

**あなたが 'HasValue'をチェックしても、' strict'ポリシーは気にしません。単にIntegerにキャストしようとしましたか? 'user.setID(DirectCast(cctUser.OPX_Rechte、整数)))'。プロパティは値を持っていることを知っているので、それは問題ではありません。 –

+0

はい私は単にそれをキャストすることができましたが、私はなぜそれをやらなければならなかったのか理解せずに単純にそれをやりたいとは思いませんでした。 –

答えて

2

.Valueを追加します。

は、なぜ私が「hasValueは」

Entity Frameworkのは、ちょうどあなたがそれを与えるオブジェクトを使用して確認しても、このエラーメッセージを取得します。 OPX_がヌル可能でない新しいオブジェクトを作成することはできません。

+0

10分で回答を受け入れることができます。何かを学んだことありがとう –

2

setOpxRights関数はおそらくIntegerをパラメータとして受け取り、Option Strict OnはIntegerを許可しません。暗黙的にIntegerに変換されます。もしそれが常に値を持つことが確かであれば、cctUser.OPX_Rechte.Valueを渡してください。

1

コンパイラは完璧ではありませんが、どこのstatmentを使ってもOPX_Rechteは値を持つことがわかります。 Integerを持っているオブジェクトcctUserを使っているだけですか? Integerが必要です。

関連する問題