«Наследство» между отображениями с использованием выражения > для структуры сущности запросы ⇐ 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 столбцов; есть ли способ определить общие свойства между этими «прогнозами» в одном месте, чтобы сократить дублирование кода? Вся общая логика между «прогнозами»: < /p>
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: «только без параметрических конструкторов и инициализаторов поддерживаются в LINQ для объектов. < /p>
< /blockquote>
strong>. использует структуру Entity для взаимодействия с базой данных


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

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