Чтение ДАННЫХ с ОБЪЕКТА asp.net MVC C # - PullRequest
0 голосов
/ 12 мая 2010

Я новичок в MVC и застрял в странной ситуации. Мне нужно прочитать данные из объекта типа, и я пробовал разные способы, и я не смог найти решение. Пожалуйста, помогите.

        IList<User> u = new UserRepository().Getuser(Name.ToUpper(), UserName.ToUpper(), UserCertNumber.ToUpper(), Date.ToUpper(), UserType.ToUpper(), Company.ToUpper(), PageNumber, Orderby, SearchALL.ToUpper(), PrintAllPages.ToUpper());


        object[] users = new object[u.Count];
        for (int i = 0; i < u.Count; i++)
        {
            users[i] = new
            {
                Id = u[i].UserId,
                Title = u[i].Title,
                FirstName = u[i].FirstName,
                LastName = u[i].LastName,
                Privileges = (from apps in u[i].UserPrivileges select new { PrivilegeId = apps.Privilege.PrivilegeId, PrivilegeName = apps.Privilege.Name, DeactiveDate = apps.DeactiveDate }),
                Status = (from status in u[i].UserStatus select new { StatusId = status.Status.StatusId, StatusName = status.Status.StatusName, DeactiveDate = status.DeactiveDate }),
                ActiveDate = u[i].ActiveDate,
                UserName = u[i].Email,
                UserCN = (from cert in u[i].UserCertificates select new { CertificateNumber = cert.CertificateNumber, DeactiveDate = cert.DeactiveDate }),
                Company = u[i].Company.Name

            };
        }



        string x = "";
        string y = "";

        var report = users;


        foreach (var r in report)
        {
            x = r[0].....;
            i want to assign the values from the report to something else and I am not able to read the data from the report object. Please help.
        }

Спасибо.

Ответы [ 4 ]

1 голос
/ 12 мая 2010

Используйте метод расширения Select, чтобы непосредственно создавать анонимные типизированные объекты, а не назначать их объекту универсального класса Object. После этого вы сможете ссылаться на свойства объекта по своему усмотрению.

   IList<User> us = new UserRepository().Getuser( Name.ToUpper(),
                                                  UserName.ToUpper(),
                                                  UserCertNumber.ToUpper(),
                                                  Date.ToUpper(),
                                                  UserType.ToUpper(),
                                                  Company.ToUpper(),
                                                  PageNumber,
                                                  Orderby,
                                                  SearchALL.ToUpper(),
                                                  PrintAllPages.ToUpper()); 

    var users = us.Select( u =>  new 
        { 
            Id = u[i].UserId, 
            Title = u[i].Title, 
            FirstName = u[i].FirstName, 
            LastName = u[i].LastName, 
            Privileges = (from apps in u[i].UserPrivileges select new { PrivilegeId = apps.Privilege.PrivilegeId, PrivilegeName = apps.Privilege.Name, DeactiveDate = apps.DeactiveDate }), 
            Status = (from status in u[i].UserStatus select new { StatusId = status.Status.StatusId, StatusName = status.Status.StatusName, DeactiveDate = status.DeactiveDate }), 
            ActiveDate = u[i].ActiveDate, 
            UserName = u[i].Email, 
            UserCN = (from cert in u[i].UserCertificates select new { CertificateNumber = cert.CertificateNumber, DeactiveDate = cert.DeactiveDate }), 
            Company = u[i].Company.Name 

        }); 


    string x = ""; 
    string y = ""; 

    var report = users; 

    foreach (var r in report) 
    { 
        var company = r.Company; // example
        ...
    }

РЕДАКТИРОВАТЬ : Кстати, есть ли какая-то причина, по которой вы преобразуете все эти параметры в верхний регистр, а не просто выполняете инвариантные сравнения регистра в своем хранилище?

0 голосов
/ 12 мая 2010

Просто добавление в решение tvanfosson:

Если мы хотим получить PrivilegeName, мы делаем:

            foreach (var r in report) 
            { 
                x = r.FirstName; // example

                foreach (var s in r.Privileges)
                {
                    y = s.PrivilegeName; //Example
                }

            }
0 голосов
/ 12 мая 2010
object o = new { Name = "string" };
Console.WriteLine(o.GetType().GetProperty("Name").GetValue(o, null));

Но это не очень рекомендуемая практика. Для этого я бы создал стандартный класс передачи данных.

0 голосов
/ 12 мая 2010

Как вы это делаете, вы создаете анонимный тип.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...