如何在Linq中返回强类型对象?

时间:2011-10-04 16:42:04

标签: linq linq-to-sql linq-to-entities

我有一个存储过程,它返回一个用户列表(用户表中的行)。

var admins = db.aspnet_UsersInRoles_GetUsersInRoles('/', "Admin");

LINQ为我生成了aspnet_User类,所以我能以某种方式将结果映射到aspnet_User类型的列表吗?类似的东西:

List<aspnet_User> admins =  db.aspnet_UsersInRoles_GetUsersInRoles('/', "Admin");

这是capture of what is returned

4 个答案:

答案 0 :(得分:2)

你完全有可能只需要:

List<aspnet_User> admins =  db.aspnet_UsersInRoles_GetUsersInRoles('/', "Admin")
                              .ToList();

但是很难知道方法调用返回的类型。

答案 1 :(得分:2)

也许这应该是一个评论,但它太长了......

好吧,你真的不希望内部课程<aspnet_User>你想要一个MembershipUser

那么如何不使用成员资格提供程序附带的存储过程,而是真正使用成员资格提供程序呢。

有一个漂亮的类:System.Web.Security中的角色

它给你这个:

public static string[] GetUsersInRole(string roleName)

从这里开始,在列表中获取MembershipUser的foreach并不复杂。

答案 2 :(得分:1)

默认情况下,存储过程将返回一个类型,该类型根据输出列确定,并在结尾处添加了Result。它不会将它与您已确定的类型相关联。要更改此设置,您可以将属性窗口中的“返回类型”更改为已在模型中定义的类型,或者将存储过程拖动到模型中时,将其直接放在希望存储过程为的类型上映射到。

但是,您没有机会更改存储过程的列映射,因此请确保存储过程生成的形状与目标对象结构相同。

答案 3 :(得分:0)

这是一篇旧帖子,今天我正在研究它,我也遇到了同样的问题,

我认为你要申请asp会员资格?

您无法将此存储过程转换为aspnet_User,因为它会返回aspnet_UsersInRoles_GetUsersInRolesResult类型。

但是从这个aspnet_UsersInRoles_GetUsersInRolesResult你可以得到userName,然后请求aspnet_User表:

    String app = "your application name";
    String role = "your role name";

    ArrayList userInRoleList = new ArrayList();

    //Get the role ID
    ASPNETDBDataContext aspDB = new ASPNETDBDataContext();

    var userInRole = aspDB.aspnet_UsersInRoles_GetUsersInRoles(app, role);

    foreach (aspnet_UsersInRoles_GetUsersInRolesResult users in userInRole)
    {
        userInRoleList.Add(users.UserName);
    }