2011-10-04 23 views
1

我有一個存儲過程返回用戶列表(用戶表中的行)。如何在Linq中返回強類型對象?

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

+0

以及是否'aspnet_UsersInRoles_GetUsersInRoles'返回什麼類型的? –

回答

2

這是完全可能的,你只需要:

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

但很難知道沒有看到什麼類型的方法調用返回。

+0

aspnet_UsersInRoles_GetUsersInRoles返回ISingleResult

+0

@ dev.e.loper:嗯。 'aspnet_UsersInRoles_GetUsersInRolesResult'具有什麼功能? –

+0

看起來像在ResultView中有兩個對象。 http://i.stack.imgur.com/V9KQf.png –

2

也許這應該是一個評論,但它是太漫長......

嗯,你真的不希望內部類<aspnet_User>你應該想MembershipUser

那麼如何不使用成員資格提供程序附帶的存儲過程,但真正使用成員資格提供程序本身。

有一個美麗的類:在System.Web.Security

角色,它給你:

public static string[] GetUsersInRole(string roleName) 

從這裏,一個foreach列表中得到的MembershipUser(S)爲不那麼複雜。

1

默認情況下,存儲過程將返回一個類型,該類型將根據輸出列以及添加到結尾的Result來確定。它不會將它與您已確定的類型關聯。要改變這一點,可以將屬性窗口中的返回類型更改爲您已經在模型中定義的類型,或者將存儲的proc拖放到模型中時,將其直接拖放到您希望存儲過程的類型上映射到。

但是,您沒有機會更改存儲過程的列映射,因此請確保存儲過程生成的形狀與目標對象結構相同。

0

這是舊的文章和我工作的今天,我也得到了同樣的問題,

我想你請求的ASP會員?

您不能將此存儲過程轉換爲aspnet_User,因爲它返回aspnet_UsersInRoles_GetUsersInRolesResult類型。

但是從這個aspnet_UsersInRoles_GetUsersInRolesResult你可以得到用戶名,然後請求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); 
    }