次のように、プロジェクションを使用してLINQで2つのオブジェクトタイプをマップできることを知っています。
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;}
}
しかし、これを行うためにジェネリックのようなものを作りたい場合はどうなりますか?私が扱っている2つのタイプを具体的に知りません。したがって、「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
}
これは難しいことですが、不可能ではないことを願っています。モデルとビューモデル間の明示的なマッピング作業を大幅に節約できるからです。