arry.net Ответов: 1

Нужно сделать цикл через динамическую переменную


>У меня есть 100 хранимых процедур, которые возвращают неопределенные данные (они могут возвращать от 1 до n чисел столбцов с одной или несколькими строками)
Я использую Entity framework, который возвращает мне объект класса или список объектов.
Что мне нужно, так это создать единственную функцию, в которой я могу передать выходные данные моей любой StoredProcedure
и независимо от структуры данных он генерирует HTML (который я возвращаю непосредственно в пользовательский интерфейс), а также мне нужно получить доступ к имени Поля.
Так что если мой sp вернется

ВАР результат1 = ДБ.getServerDetailsBackupDefincation(имя_сервера);
ВАР результат2 = ДБ.getServerDetailsStorageDevice(имя_сервера);
Я хочу отправить результат в функцию, которая будет принимать результат либо как динамический, либо как объект .

частных статических недействительным петли(предмет результат)
{
}
частный статический пустотный цикл (динамический результат){
}
И теперь я должен получить доступ ко всем элементам списка в результате, чтобы я мог прокрутить его
и создайте заголовок с именем столбца
И строки, если они существуют в результате.

До сих пор я могу получить имя столбца.

PropertyInfo[] propertyInfo = obj.GetType (). GetProperties();
Type type=propertyInfo[2].GetMethod.Тип_возвращаемого_значения; /получить доступ к тип список
PropertyInfo[] propertyInfo1 = тип.Метод getproperties();

foreach (PropertyInfo p в propertyInfo1)
{
Приставка.Метода WriteLine(стр. Название); //
}

Надеюсь, вы понимаете, что мне нужно
Спасибо

Что я уже пробовал:

частных статических недействительным петли(объект obj)
{
строка xPrev = "";
PropertyInfo[] propertyInfo = obj.GetType (). GetProperties();
Type type=propertyInfo[2].GetMethod.Тип_возвращаемого_значения;
PropertyInfo[] propertyInfo1 = тип.Метод getproperties();



foreach (PropertyInfo p в propertyInfo1)
{
Приставка.Метода WriteLine(стр. Название);

string propertyName = строка.Присоединиться (""., новый строка[] { xPrev, стр. Название });
если (!имя_свойства.Содержит ("Родитель"))
{
Тип propertyType = p. PropertyType;
if (! propertyType.Метод toString().StartsWith ("MyCms"))
{
Приставка.WriteLine (строка.Присоединиться (""., новый строка[] { xPrev, стр. Название }).TrimStart(new char[] { '.' }));
}
ещё
{
xPrev = строка.Присоединиться (""., новый строка[] { xPrev, стр. Название });
}
}
}
}
}


открытый класс Эми
{
public int id { get; set; }
public string name { get; set; }
}
ученик открытый класс
{
public int studentID { get; set; }
публичная строка studentName { get; set; }
}
static void Main (string[] args)
{

Список<Эми&ГТ; emp1= новый список<ЭМП и GT;() { новый пуп() { ИД = 1, имя = "ААА" }, новый пуп() { ИД = 2, имя = "ВВВ" } };
Список<студент&ГТ; оператор student1= новый список<студент> У() { новый студент() { studentID = 1, studentName = "С1" }, новый студент() { studentID = 2, studentName = "С2" } };
петля (emp1);
// loop(student1);
Приставка.С readline();

}

The Praveen Singh

в чем проблема или какую ошибку вы получаете ?

arry.net

In loop function {loop(object result)}
Я могу получить доступ к объекту в нем есть 3 вещи
Емкость, Количество, {DynamicListLoop.Элемент Emp [Int32]}
Я не могу пройти через это
Добавление кода в раздел (Что я уже пробовал:), чтобы вы могли запустить его напрямую

1 Ответов

Рейтинг:
12

arry.net

найти решение

public static void GenerateHtml(object obj)
        {
            string htmlData = "<table class='table table-bordered table - responsive table - hover'>";
            StringBuilder sbHeader = new StringBuilder();
            StringBuilder sbBody = new StringBuilder();

            foreach (PropertyInfo pi in obj.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
            {
                if (typeof(IList).IsAssignableFrom(pi.PropertyType))
                {
                    IList elms = (IList)pi.GetValue(obj, null);
                    if (elms != null)
                    {
                        sbHeader.Append(htmlData + "<thead><tr class='table-info'>");
                        foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(elms[0]))
                        {
                            sbHeader.Append("<th>" + descriptor.Name+"</th>");
                        }
                        sbHeader.Append("</tr></thead>");
                        sbBody.Append("<tbody>");
                        for (int i = 0; i < elms.Count; i++)
                        {
                            sbBody.Append("<tr class='table-active'>");
                            foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(elms[i]))
                            {
                                //string name=descriptor.Name;
                                //object value=descriptor.GetValue(elms[i]);
                                //Console.WriteLine("{0}={1}", name, value);
                                sbBody.Append("<td>" + Convert.ToString(descriptor.GetValue(elms[i])) + "</td>");
                            }
                            sbBody.Append("</tr>");
                        }
                        sbBody.Append("<tbody></table>");
                    }
                }
                else
                {
                    Console.WriteLine(pi.Name + "=" + pi.GetValue(obj, null));
                }
            }
            Console.WriteLine(sbHeader.ToString() + sbBody.ToString());
        }