2017-03-15 7 views
2

"MM/dd/yyyy"のShortDateTime形式でフォーマットするデータを取得しようとしていますが、私が試みていることはすべて動作していません。Entity FrameworkでMVCで日付形式が機能していませんか?

私は以下のEFを持っています。私が特に見ているフィールドはExpireDateです。フィールドの周りにDateTime.Parseを使用しようとすると、エラーcannot convert from 'System.DateTime?" to 'string'が発生します。 DateTime.Parseを指定しないと、日付は3/15/2017 12:00:00 AMと表示されます。

モデルでデータアノテーションを使用してみましたが、どちらも機能していないようです。

提案がありますか?

EFクエリ

data = (from e in ctx.clock_emp_excep_hist 
     join g in ctx.clock_group on e.group_id equals g.group_id 
     join emp in ctx.employee on e.emp_id equals emp.emp_id 
     where e.group_id == 4 
     select new 
     { 
      UpdateDate = e.create_date, 
      UpdateType = e.add_delete_ind, 
      GroupId = e.group_id, 
      GroupName = g.group_name, 
      Reason = e.reason, 
      ExpireDate = e.expiration_date, 
      UpdateEmployeeId = e.emp_id, 
      UpdateFirstName = emp.emp_firstname, 
      UpdateLastName = emp.emp_lastname 
     }).Select(e => new EmployeeExceptionLog { 
        UpdateDate = e.UpdateDate, 
        UpdateType = e.UpdateType == "A" ? "Add" : "Delete", 
        GroupId = e.GroupId, 
        GroupName = e.GroupName, 
        Reason = e.Reason, 
        ExpireDate = DateTime.Parse(e.ExpireDate), 
        UpdateEmployeeId = e.UpdateEmployeeId, 
        UpdateFirstName = e.UpdateFirstName, 
        UpdateLastName = e.UpdateLastName 
     }).ToList(); 
    } 

プロパティクラスで

[DataType(DataType.DateTime)] 
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode=true)] 
public DateTime? ExpireDate { get; set; } 

さらに詳しい情報:

これは私がビュー内のデータを表示しています方法です。

@foreach (var item in Model.AuditLogs) 
{ 
    <tr class="@(item.UpdateType == "Delete" ? "danger" : "")"> 
     <td>@item.UpdateDate</td> 
     <td>@item.UpdateType</td> 
     <td>@item.Reason</td> 
     <td>@item.ExpireDate</td> 
     <td>@item.UpdateEmployeeId - @item.UpdateFirstName @item.UpdateLastName</td> 
    </tr> 
} 

Oracle Databaseのデータ型は、DateTime?です。

+0

:このにあなたのクエリを更新し

ExpireDate != null ? ExpireDate.Value.ToString("MM/dd/yyyy") : "ERROR"; 

:フォーマットされた文字列にNULL可能日時を変換する 。通常Convert.xxxは動作します。私はそれをテストしていないが、私はConvert.ToStringを試すだろう –

+0

データベースに文字列として日付を格納していますか? – mason

+0

DateTimeにはフォーマットはありません**。これはバイナリ値です。 DateTime値は、文字列に変換されたとき、つまりビュー内でフォーマットされます。 –

答えて

1
public DateTime? ExpireDate { get; set; } 

nullable日付したがって、ExpireDateのNull値を持つことができます。

"cannot convert from 'System.DateTime?" to 'string'" 
ExpireDate = DateTime.Parse(e.ExpireDate), 

DateTime.Parseは、パラメータとして文字列をとります。

は、私はあなたがあなたのモデルプロパティがdateTimeのであればToShortDateString()を使用して表示することができますビューにも

ExpireDate = ((e.ExpireDate != null) ? (DateTime)e.ExpireDate : "SOME DEFAULT DATE"), 

にこれを変更します。

<td>@item.ExpireDate.ToShortDateString()</td> 

hereは、DateTimeの詳細です。

+0

は "SOME DEFAULT DATE"としてDateTime.MinValueを使用していましたが、次にValue.ToShortDateString()!= "1/1/0001"かどうかを確認するためにビューで条件付きチェックをしてから日付を書き出していました。その部分はきれいではありませんが、少なくとも動作します。 – Caverman

+0

モデルプロパティがDateTimeの場合は? ExpireDate.Hasvalueをチェックすることができますか? ExpireDate.ToshortDateString(): ""; – AJP

0

null可能なDateTimeを解析することはできません。あなたが実装する方法を必要とし、LINQでは

data = (from e in ctx.clock_emp_excep_hist 
     join g in ctx.clock_group on e.group_id equals g.group_id 
     join emp in ctx.employee on e.emp_id equals emp.emp_id 
     where e.group_id == 4 
     select new 
     { 
      UpdateDate = e.create_date, 
      UpdateType = e.add_delete_ind, 
      GroupId = e.group_id, 
      GroupName = g.group_name, 
      Reason = e.reason, 
      ExpireDate = e.expiration_date, 
      UpdateEmployeeId = e.emp_id, 
      UpdateFirstName = emp.emp_firstname, 
      UpdateLastName = emp.emp_lastname 
     }).Select(e => new EmployeeExceptionLog { 
        UpdateDate = e.UpdateDate, 
        UpdateType = e.UpdateType == "A" ? "Add" : "Delete", 
        GroupId = e.GroupId, 
        GroupName = e.GroupName, 
        Reason = e.Reason, 
        ExpireDate = ExpireDate != null ? ExpireDate.Value.ToString("MM/dd/yyyy") : "ERROR", 
        UpdateEmployeeId = e.UpdateEmployeeId, 
        UpdateFirstName = e.UpdateFirstName, 
        UpdateLastName = e.UpdateLastName 
     }).ToList(); 
    } 
関連する問題