Как вернуть объект сильного типа в Linq? - PullRequest
1 голос
/ 04 октября 2011

У меня есть сохраненный процесс, который возвращает список пользователей (строки в таблице User).

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

LINQ сгенерировал классы aspnet_User для меня, так что я могу каким-то образом отобразить результат в список типа aspnet_User?Что-то вроде:

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

Вот захват того, что возвращается .

Ответы [ 4 ]

2 голосов
/ 04 октября 2011

Возможно, это должен быть комментарий, но он слишком длинный ...

Ну, вы на самом деле не хотите внутренний класс <aspnet_User>, вам нужно MembershipUser.

Так как насчет того, чтобы не использовать хранимую процедуру, поставляемую с поставщиком членства, но реально использовать самого поставщика членства.

Существует прекрасный класс: роли в System.Web.Security

И этодает вам это:

public static string[] GetUsersInRole(string roleName)

Отсюда, foreach, чтобы получить MembershipUser (s) в списке, не так уж сложен.

2 голосов
/ 04 октября 2011

Вполне возможно, что вам просто нужно:

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

Но трудно понять, не видя, какой тип возвращает метод.

1 голос
/ 05 октября 2011

По умолчанию хранимая процедура возвращает тип, который она определяет, основываясь на выходных столбцах с Result, прикрепленным к концу. Это не ассоциируется с типами, которые вы уже определили. Чтобы изменить это, вы можете либо изменить тип возвращаемого значения в окне свойств на тип, который вы уже определили в своей модели, либо при перетаскивании сохраненного процесса в модель перетащите его непосредственно на тип, для которого требуется, чтобы сохраненный процесс был сопоставлены

Однако у вас нет возможности изменить сопоставления столбцов для хранимых процедур, поэтому убедитесь, что форма, создаваемая хранимым процедурой, совпадает со структурой целевого объекта.

0 голосов
/ 11 февраля 2013

Это старый пост, и я работал над ним сегодня, и у меня возникает та же проблема,

Я думаю, что вы запрашиваете членство в 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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...