Итак, мой вопрос: я хотел бы реорганизовать этот фрагмент кода. Мне нужно получить 3 значения, SpentTimeHours
, RemainingTimeHours
и InitialEffortEstimateHours
, которые имеют значение nullable double (double?). Эти значения должны поступать из кеша (словаря) или, если они не существуют из кеша, получить их из db (шаблон репозитория).
Значения из словаря работают нормально, проблема в том, чтобы получить значения из репозитория и использовать отражение. FindFirstOrDefaultAsync возвращает Task<T>
объекта USTask
public partial class USTask
{
public long Aid { get; set; }
public Nullable<double> RemainingTimeHours { get; set; }
public Nullable<double> SpentTimeHours { get; set; }
public Nullable<double> InitialEffortEstimateHours { get; set; }
}
класс KpiService
public double GetEstimatedStoryPoint(
List<CrossReference> result,
string propertyName,
string pattern,
long Aid,
bool isCache,
bool isUserStory = false)
{
if (!isCache)
{
double? value = 0;
//ERROR -
value = _userStoryTaskRepository
.FindFirstOrDefaultAsync(id => id.Aid == ids.Aid)
.Result
.GetType()
.GetProperty(propertyName)
.GetValue(value , null) as double?;
}
else
{
//Working fine
value = GetValuesForEstimatedStoryPoint(GraphTable._USTask, propertyName, ids.Aid);
}
......
в KpiVieModel.cs
Я внедряю kpiService в конструктор и вызываю так, я передаю 3 propertyName как параметр SpentTimeHours
, RemainingTimeHours
, InitialEffortEstimateHours
тогда я звоню так
// This Work
//In cache
sumSpentTime += _kpiService.GetEstimatedStoryPoint(crosReferenceInCache, "SpentTimeHours", pattern, Aid, true, isUserStory);
sumRemainigTime += _kpiService.GetEstimatedStoryPoint(crosReferenceInCache, "RemainingTimeHours", pattern, Aid, true, isUserStory);
sumEstimated += _kpiService.GetEstimatedStoryPoint(crosReferenceInCache, "InitialEffortEstimateHours", pattern, Aid, true, isUserStory);
This not..
//not in cache , db access
sumSpentTime += _kpiService.GetEstimatedStoryPoint(crosReferenceNotInCache, "SpentTimeHours", pattern, Aid, false, isUserStory);
sumRemainigTime += _kpiService.GetEstimatedStoryPoint(crosReferenceNotInCache, "RemainingTimeHours", pattern, Aid, false, isUserStory);
sumEstimated += _kpiService.GetEstimatedStoryPoint(crosReferenceNotInCache, "InitialEffortEstimateHours", pattern, Aid, false, isUserStory);
Проблема в том, что объект не соответствует типу целевого источника.
Я не хочу делать это n раз.
SpentTimeHours = _userStoryTaskRepository.FindFirstOrDefaultAsync(id => id.Aid == ids.Aid).Result.SpentTimeHours;
RemainingTimeHours = _userStoryTaskRepository.FindFirstOrDefaultAsync(id => id.Aid == ids.Aid).Result.RemainingTimeHours;
InitialEffortEstimateHours = _userStoryTaskRepository.FindFirstOrDefaultAsync(id => id.Aid == ids.Aid).Result.InitialEffortEstimateHours;
foundA
? Разве вам не нужно присваивать переменнуюResult
, а затем передавать ее вGetValue
? - person Quantic   schedule 18.02.2017var myObject = _userStoryTaskRepository.FindFirstOrDefaultAsync(id => id.Aid == ids.Aid).Result; value = myObject.GetType().GetProperty(propertyName).GetValue(myObject, null) as double?;
- person Quantic   schedule 18.02.2017