Я знаю, что могу сопоставить два типа объектов с помощью LINQ, используя проекцию так:
var destModel = from m in sourceModel
select new DestModelType {A = m.A, C = m.C, E = m.E}
куда
class SourceModelType
{
string A {get; set;}
string B {get; set;}
string C {get; set;}
string D {get; set;}
string E {get; set;}
}
class DestModelType
{
string A {get; set;}
string C {get; set;}
string E {get; set;}
}
Но что, если я хочу сделать что-то вроде универсального для этого, где я не знаю конкретно два типа, с которыми имею дело. Таким образом, он будет ходить по типу «Dest» и соответствовать соответствующим типам «Source». Возможно ли это? Кроме того, чтобы добиться отложенного выполнения, я бы хотел, чтобы он просто возвращал IQueryable.
Например:
public IQueryable<TDest> ProjectionMap<TSource, TDest>(IQueryable<TSource> sourceModel)
{
// dynamically build the LINQ projection based on the properties in TDest
// return the IQueryable containing the constructed projection
}
Я знаю, что это сложно, но я надеюсь, что не невозможно, потому что это сэкономит мне кучу работы по явному отображению между моделями и моделями представления.