C# LINQ to实体无法识别方法';系统字符串
我有taskData中的记录列表C# LINQ to实体无法识别方法';系统字符串,c#,entity-framework,C#,Entity Framework,我有taskData中的记录列表 tasksData = MyTaskManager.GetAllTask().Select(x => new MyTaskContract { TaskMileStone=GetTaskMileStone(x.TaskMileStone } Int32 totalRecords = tasksData.Count(); // Here I got exception /* Some error has oc
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.0,返回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;
}
是的,您不能在实体框架中调用自定义方法 谢天谢地,你是一个解决办法 确保离开实体框架。通过插入一个可数调用来实现这一点,这样查询的下一个“阶段”将作为LINQ to objets执行 这一行: tasksData=MyTaskManager.GetAllTask()。选择(x=>new MyTaskContract 变成: tasksData=MyTaskManager.GetAllTask().AsEnumerable().Select(x=>new MyTaskContract
然后使用Linq To objects在对象上进行最后一次投影选择,您可以在那里调用一个方法。您想将.string()放在Linq中的什么位置?请详细说明您的问题。GetTaskMilestone()自定义方法返回字符串值。记录的任务数据列表也是IQuerable格式IQueryable tasksData;