2014-03-31 96 views
1

我有taskData中的記錄列表。LINQ to Entities不識別方法'System.String

tasksData = MyTaskManager.GetAllTask().Select(x => new MyTaskContract 
{     
    TaskMileStone=GetTaskMileStone(x.TaskMileStone 
} 

Int32 totalRecords = tasksData.Count(); // Here I got exception 


/* Some error has occurred the description of which is: LINQ to Entities 
    does not recognize the method 'System.String 
    GetTaskMileStone(System.Nullable`1[System.Int32])' 
    method, and this method cannot be translated into a store expression. */ 

而且x.TaskMileStone回報在實體框架0,1,2,3

private String GetTaskMileStone(Int32? isMileStone) 
{ 
     String milestoneName = String.Empty; 
     switch (isMileStone) 
     { 
      case AppConsts.ONE: 
       milestoneName = "PayPoint"; 
       break; 
      case AppConsts.TWO: 
       milestoneName = "Cost Point"; 
       break; 
      case AppConsts.THREE: 
       milestoneName = "Milestone"; 
       break; 
      case AppConsts.NONE: 
       milestoneName = "NO"; 
       break; 
     } 
     return milestoneName; 
} 
+0

你想把.string()放在linq中?請詳細說明你的問題。 –

+0

GetTaskMilestone()自定義方法返回字符串值。 –

回答

2

是的,你不能調用自定義方法。

感謝天堂你是一種解決方法。

確保您離開實體框架。通過插入一個AsEnumrable調用來做到這一點 - 這樣查詢的下一個「階段」就會以LINQ的形式執行到objets。

這條線:

tasksData = MyTaskManager.GetAllTask​​()選擇(X =>新MyTaskContract

變成:

tasksData = MyTaskManager.GetAllTask​​() .AsEnumerable()。Select(x => new MyTaskContract

然後最後一次使用投影的選擇將發生在使用Linq To Objects的對象上,並且您可以調用一個方法。

+0

記錄的任務數據列表也是IQuerable形式IQueryable tasksData; –

相關問題