このコード例は、この回答https://stackoverflow.com/a/16491759/98706から取られています
public static Boolean PurgeDataObject(this IDataObject dataObject, Guid uid)
{
return PurgeDataObjectImpl((dynamic) dataObject, uid);
}
private static Boolean PurgeDataObjectImpl<T>(T dataObject, Guid uid)
where T : IDataObject
{
return DataProvider.DeleteDataObject<T>(uid, DataProvider.GetConnection());
}
以下に示すように、実行時に型に基づいて関連する EF エンティティを返し、既存の継承されたコードをクリーンアップしようとする同様の状況があります:(
違いは、関数がIEnumerable<T>
のGetFilteredData
概念がないT
ため、コンパイルエラーが発生しますThe type or namespace name 'T' could not be found (are you missing a using directive or an assembly reference?)
private IEnumerable<T> GetFilteredData(Type entityType, SortedList<string, string> filterList, List<int> weeks)
{
return GetFilteredDataImpl((dynamic)entityType, filterList, weeks);
}
private IEnumerable<T> GetFilteredDataImpl<T>(T entityType, SortedList<string, string> filterList, List<int> weeks) where T : EntityObject
{
var data = _modelContext.CreateObjectSet<T>().AsExpandable();
// do more filtering and then call .ToList() to return a List<T>
}