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

Ale*_*x P 4 asp.net-mvc stored-procedures linq-to-sql

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

usp_GetDepartmentSummary

DeptName      EmployeeCount      Male      Female
HR            12                 5         7
etc...
Run Code Online (Sandbox Code Playgroud)

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

public class Department
{
     public string DeptName {get; set;}
     public int EmployeeCount {get; set;}
     public int MaleCount {get; set;}
     public int FemaleCount {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

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

ISingleResult<usp_GetDepartmentSummaryResult>
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

非常感谢

Mik*_*obs 5

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

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