代码之家  ›  专栏  ›  技术社区  ›  Alex P

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

  •  4
  • Alex P  · 技术社区  · 14 年前

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

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

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

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

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

    ISingleResult<usp_GetDepartmentSummaryResult>
    

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

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

    有什么办法实现这个目标吗?

    注意-我试过修改 设计人员 dbml xml file 直接但成功有限。我承认在直接更新这些文件时有点力不从心,我不确定这是否是最佳实践?最好是去喝点酒。

    非常感谢

    2 回复  |  直到 8 年前
        1
  •  5
  •   Mike Jacobs    14 年前

    在linq2sql构建器中手工创建类,这样类就作为linq2sql数据上下文的一部分生成。命名类部门,用所需的名称添加4个属性中的每一个。在每个属性的属性中,需要设置类型(.net类型)、服务器数据类型(varchar(100),int)和源(存储过程返回的字段的名称)。

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

        2
  •  1
  •   ben    14 年前

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