Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ to实体无法识别方法';系统字符串_C#_Entity Framework - Fatal编程技术网

C# LINQ to实体无法识别方法';系统字符串

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

我有taskData中的记录列表

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;