2

DateTime フィールドの誕生日 (null ではない) を持つテーブル要素が与えられた場合、エンティティ フレームワーク 4 では、次のことを行うことができます。

Dim mylist = (From el in Element Select el).ToList()
     .Select(function(el) new with { 
           .bday = el.birthday.toString("dd/MM/yy") 
           }

誕生日を null 許容に変更する必要があるため、SQL サーバーでテーブルを変更してから、Visual Studio で ModelDB を更新します。その結果、次の行になります。

           .bday = el.birthday.toString("dd/MM/yy") 

「整数から文字列への無効なキャスト "dd/mm/yy"」として例外を発生させます。それを「修正」する唯一の方法は、次のように行を変更することです。

           .bday = CDate(el.birthday).toString("dd/MM/yy") 

これは正しいアプローチですか?null 許容の Datetime を取得したので、el.birthday が null の場合の処理​​方法は?

ありがとう!

4

2 に答える 2

2

ちょっとした実験をすれば、何が起こっているのか完全に理解できるでしょう:

Dim normalDate As Date = Now
Dim nullableDate As Nullable(Of Date) = normalDate

Dim normalToText As String = normalDate.ToString("dd/MM/yy") 'Works perfectly

Dim nullableToText As String = nullableDate.ToString("dd/MM/yy") 'Error

変数 と の両方の内容normalDatenullableDate同じですが、そうではありません。機能は入力として型をToString("date in certain format")想定しています。Dateあなたが送っているのは Date タイプの修正版です (あまり違いはありませんが、同じでもありません)。あなたCDateがしていることは、変更されたバージョンの Date を実際に有効な Date 型に変換しているため、ToString() 機能は問題なく動作します。

あなたは正しいことをしていますか?はい、CDate が "null" を処理できる限り (CDate(Nothing)エラーは出力されません): 指定された変数を ToString() が期待するものに適合させています。

注: 上記のコードによる正確なエラー出力を確認したところ、「文字列 "dd/MM/yy" から型 'Integer' への変換は有効ではありません。」 が効果的に配信されます。したがって、取得しているエラーは、ToString("date") を Nullable Date で使用する場合の標準エラーです。あまり説明的なエラーではありませんが、これは本当です。

于 2013-07-29T08:36:06.810 に答える