如何使用linq-to-sql将存储过程结果映射到自定义类?

时间:2010-05-04 13:06:08

标签: asp.net-mvc linq-to-sql stored-procedures

我有一个返回结果集的存储过程(4列x n行)。数据基于我的数据库中的多个表,并为公司内的每个部门提供摘要。这是样本:

usp_GetDepartmentSummary

DeptName      EmployeeCount      Male      Female
HR            12                 5         7
etc...

我正在使用linq-to-sql从我的数据库中检索数据(nb - 必须使用sproc,因为它是我继承的东西)。我想调用上面的sproc并映射到一个部门类:

public class Department
{
     public string DeptName {get; set;}
     public int EmployeeCount {get; set;}
     public int MaleCount {get; set;}
     public int FemaleCount {get; set;}
}

在VS2008中,我可以将我的sproc拖放到linq-to-sql设计器的方法窗格中。当我检查designer.cs时,此sproc的返回类型定义为:

ISingleResult<usp_GetDepartmentSummaryResult>

我想做的是以某种方式修改它,以便它返回Department类型,以便我可以将sproc的结果作为强类型视图传递:

<% foreach (var dept in Model) { %>
<ul>
    <li class="deptname"><%= dept.DeptName %></li>
    <li class="deptname"><%= dept.EmployeeCount %></li>
    etc...

任何想法如何实现这一目标?

注意 - 我已尝试直接修改designer.csdbml xml file但成效有限。我承认在直接更新这些文件方面有点超出我的深度,我不确定这是最佳做法?得到一些指示会很好​​。

非常感谢

2 个答案:

答案 0 :(得分:5)

在linq2sql构建器中手动创建类,因此该类是作为linq2sql数据上下文的一部分生成的。将类命名为Department,使用您想要的名称添加4个属性中的每一个。在每个属性的属性中,您需要设置类型(.net类型)和服务器数据类型(varchar(100),int)和源(sproc返回的字段的名称)。 / p>

完成后,将sproc从服务器资源管理器拖到该类上,sproc的方法将返回一个结果作为该类型的集合。

答案 1 :(得分:1)

我试过这个并且它确实有效,但是如果SP使用临时表,它似乎不起作用。