«Наследство» между отображениями с использованием выражения > для структуры сущности запросы ⇐ C#

Место общения программистов C#
Anonymous
«Наследство» между отображениями с использованием выражения > для структуры сущности запросы

Сообщение Anonymous »

Довольно сложное отображение объектов Я унаследовал, используя статическое выражение в вызове. Select (из моих исследований они, кажется, называются «экспрессирующими деревьями», но для краткости я буду называть их «прогнозами»). НАПРИМЕР. ProtectionItem.mainProjection используется для картирования результатов запроса на FOOBAROBJECT Таблицу для экземпляров ProtectionItem класса:

Код: Выделить всё

// the query
_repo.Query()
.Select(ProjectionItem.MainProjection);

// elsewhere...
public class ProjectionItem
{
public int Foo { get; set; }
public int Bar { get; set; }
public int YaddaYadda { get; set; }

public static Expression MainProjection
{
get
{
return x => new ProjectionItem
{
Foo = x.Foo,
Bar = x.SomeOtherStuff.AndMoreStuff
.ThisDoesSomething(),
YaddaYadda = x.YouGetTheDrill,
// in reality there's like 80 more columns being mapped
};
}
}
}
Однако теперь мы хотим, чтобы еще одна «проекция» для той же таблицы foobaRobject , которая была бы почти идентична MainProction , за исключением 3-4 столбцов. Есть ли способ определить общие свойства между этими «прогнозами» в одном месте, чтобы сократить дублирование кода? Я знаю, что наиболее правильным решением является , вероятно, , чтобы просто ... Переписать все это как обычный запрос, но давайте поработаем в предположении, что в этом сценарии я просто не могу прямо сейчас. PrettyPrint-Override ">public class ProjectionItem
{
public int Foo { get; set; }
public int Bar { get; set; }
public int YaddaYadda { get; set; }

public ProjectionItem(FooBarObject x)
{
Foo = x.Foo;
Bar = x.SomeOtherStuff.AndMoreStuff
.ThisDoesSomething();
}

public static Expression MainProjection
{
get
{
return x => new ProjectionItem(x)
{
YaddaYadda = x.YouGetTheDrill,
};
}
}

public static Expression NewProjection
{
get
{
return x => new ProjectionItem(x)
{
YaddaYadda = x.YouGetTheDrill + 1,
};
}
}
}
< /code>
Но эта попытка привела к этому исключению: < /p>

system.notsupportedException: 'только конструкторы без параметра и инициализаторы и инициализаторы. и использует структуру объекта для взаимодействия с базой данных


Подробнее здесь: https://stackoverflow.com/questions/796 ... -framework

Вернуться в «C#»