Как создать класс с динамическим свойством (Expandoobject?)

У меня есть частичный класс с именем Exam. Структура класса показана ниже:

public partial class Exam 
{
    public string ID { set; get; } //default
    public string Name { set; get; } //default
}

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

ID, Name, Test1, Test2, Test3....
1, Peter, Y, N, Y
1, John, N, Y, Y

public virtual ObjectResult<Exam> sp_exam()
{
    return  ((IObjectContextAdapter)this).
              ObjectContext.ExecuteFunction<Exam>("ConnectionEntities.sp__exam");
}

person user3431414    schedule 11.12.2014    source источник
comment
Вы делаете это с помощью так называемого динамического прокси. Посмотрите код в библиотеке Castle.Core и просмотрите эту тему в Интернете. Вы, безусловно, также можете использовать DynamicObject, просто я не уверен, как он работает по сравнению с Castle.   -  person code4life    schedule 11.12.2014


Ответы (1)


AFAIK ExpandoObject — это просто синтаксический сахар для простого словаря. Итак, вы можете написать:

public partial class Exam {
    public string ID { set; get; } //default

    public string Name { set; get; } //default

    public readonly Dictionary<string, object> ExtraProperties = new Dictionary<string, object>();
}

но я думаю, у вас просто плохая объектная модель.

person Alex Zhukovskiy    schedule 11.12.2014
comment
Вы можете динамически печатать, используя простой словарь? Это довольно упрощенный взгляд на ExpandObject, в котором игнорируются некоторые тонкие особенности. Взгляните на Clay или ClaySharp, чтобы увидеть, что можно сделать. - person code4life; 11.12.2014
comment
@code4life can you dynamic type using a simple dictionary - поясните, пожалуйста, что это значит - person Alex Zhukovskiy; 11.12.2014