2015-06-18 59 views
-1

我有一個MVC應用程序,其中我收集日期時間字段(MM/DD/YYYY)作爲字符串,以避免鉻覆蓋在自舉的日期選擇器,並避免的Excel sqlbulk上傳映射。我現在需要將這個字符串字段映射回日期時間,並且正在爲此付出極大的努力。轉換字符串在映射到DATETIME視圖模型

這裏是我的模型:

public class Something 
{ 
    [Key] 
    public string SomeNumber { get; set; } 
     .... 
    public string SomeDate { get; set; } 
    public string SomeOtherDate { get; set; } 
     .... 
} 

和我的視圖模型:

public class HistoricalDataVM 
{ 
    ..... 

    [Display(Name = "Some Date")] 
    public DateTime SomeDate { get; set; } 

    [Display(Name = "Some Other Date")] 
    public DateTime SomeOtherDate { get; set; } 

    .... 
} 

和我的控制器操作:

[ChildActionOnly] 
public PartialViewResult SomePartial() 
{ 

    var vm = _ctx.Something.Select(p => new HistoricalDataVM() 
    { 

     ... 

     SomeDate = DateTime.ParseExact(p.SomeDate, "MM/dd/yyyy", CultureInfo.InvariantCulture), 
     SomeOtherDate = DateTime.ParseExact(p.SomeOtherDate, "MM/dd/yyyy", CultureInfo.InvariantCulture), 

     .... 

    }).OrderByDescending(c => c.SomeDate).ToList(); 

    return PartialView(vm); 
} 

我曾嘗試 「轉換」 和DateTime.Parse但所有導致「黃色死亡屏幕」,並顯示以下錯誤消息:

LINQ to Entities does not recognize the method 'System.DateTime ParseExact(System.String, System.String, System.IFormatProvider)' method, and this method cannot be translated into a store expression. 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

我已經Google搜索和搜索到,並找不到一個有效的解決方案。

任何幫助,非常感謝。謝謝。

+0

您可以顯示'DateTime.Parse'或'/ Convert'代碼示例嗎? –

+1

供參考:您可以爲瀏覽器提供自己的日期選擇器功能測試,並防止在這些情況下應用引導程序。這是一個可以解決的問題。 –

+0

你是對的,科裏,但仍然需要在sqlbulk方法中的映射,我大大縮短了什麼是一個非常長的模型,所以這不是唯一的考慮因素。 – New2ASPMVC

回答

1

您需要查詢第一兌現你的應用程序,然後解析它。實體框架不知道如何執行點網絡方法,它只知道如何將它們轉換爲SQL

0

你可以使用DateTime.ParseExact()並設置你的嚴格格式。 https://msdn.microsoft.com/en-us/library/w2sa9yss(v=vs.110).aspx

var datetime = DateTime.ParseExact(date, "MM/dd/yyyy", CultureInfo.InvariantCulture); 

它應該給你這樣的事情:

[ChildActionOnly] 
public PartialViewResult SomePartial() 
{ 
    var vm = _ctx.Something.Select(p => new HistoricalDataVM() 
    { 
      SomeDate = DateTime.ParseExact(p.SomeDate, "MM/dd/yyyy", CultureInfo.InvariantCulture), 
      SomeOtherDate = DateTime.ParseExact(p.SomeOtherDate, "MM/dd/yyyy", CultureInfo.InvariantCulture), 

      .... 

     }).OrderByDescending(c => c.SomeDate).ToList(); 

     return PartialView(vm); 
    }