如何将sql存储过程的结果转换为列表

时间:2013-09-12 02:37:10

标签: sql-server entity-framework stored-procedures edmx

我正在尝试同时学习EF,C#和MVC,所以如果这有点基础我会道歉。

我试图将SQL Server存储过程的结果集转换为模型。

我创建了一个EDMX文件并导入了存储过程,结果集存在于cs文件中 - 见下文。

public partial class prBGGetYourTasks_Result
{
    public int CompanyTaskID { get; set; }
    public int TaskID { get; set; }
    public string TaskName { get; set; }
    public string TaskDescription { get; set; }
    public System.DateTime StartDate { get; set; }
    public System.DateTime EndDate { get; set; }
    public string TimeLeft { get; set; }
    public string Status { get; set; }
}

然后我在models文件夹中创建了一个类,其中包含名为Task的确切定义。

我正在尝试使用以下代码填充SP的结果:

public class TaskList : List<Task> {
    public TaskList GetTasks()
        {
            BGEntities BGDB = new BGEntities();
            TaskList task_list = new TaskList();
            task_list = BGDB.prBGGetYourTasks(HttpContext.Current.User.Identity.Name).ToList();
            return task_list;
    }
}

然而它即将出现“无法将类型'Genric.List隐式转换为'Task.TaskList'。我尝试过尝试结果类型的变量并将其转换为结果集类型。

请告知我是否也采取了错误的方式。

我之前使用过sql阅读器和循环来填充模型,但我认为必须有更好的方法。

2 个答案:

答案 0 :(得分:0)

您的问题在这里:

TaskList task_list = new TaskList();
task_list = BGDB.prBGGetYourTasks(HttpContext.Current.User.Identity.Name).ToList

您正在尝试将List<Task>分配给TaskList。继承不会这样。

List<Task> tasks = new List<Task>();
TaskList taskList = new TaskList();

//This will compile
tasks = taskList;

//This will not
taskList = tasks;

您可能希望完全摆脱TaskList并使用List<Task>,但您似乎并没有向其中添加任何新的行为成员。

答案 1 :(得分:0)

我的猜测是你的数据模型中的函数导入被设置为返回一个ComplexTypes的集合,而不是你想要的实体类型。

修复。双击数据模型中的函数(存储过程) - &gt;功能导入。在对话框中,您将找到标题为“返回集合”的部分。从下拉列表实体中选择您的实体类型:单击确定。这一次也使我感到沮丧。

希望这有助于寻找答案的人。真的希望原帖可以找到适合他们的工作!