c# - C#:无法将现有字典对象添加到视图模型对象
问题描述
我正在我的 c# 控制器中实现一个视图模型,并且在将填充的字典添加到视图模型对象时遇到问题
我的视图模型 FundPerformanceVM 如下
public class FundPerformanceVM
{
public FundPerformanceVM()
{
TrackRecord = new List<TrackRecordVM>();
}
public int FundId { get; set; }
public string FundName { get; set; }
public List<TrackRecordVM> TrackRecord { get; set; }
public Dictionary<int, List<Tuple<string, double, double>>> FundStatistics { get; set; }
}
以下是我填充视图模型的代码。如果你注意到我在打电话
fundStatistics = GetRiskMatrixByFunds(fundPerformance);
我需要将它添加到 viewmodel 对象中。当我这样做时,我得到了错误
fundPerformance.Add(fundStatistics);
GetFundPerformance 方法
private List<FundPerformanceVM> GetFundPerformance(Dictionary<int, IEnumerable<FUND_PERFORMANCE>> allPerformance, DateTime currentMonth)
{
var fundPerformance = new List<FundPerformanceVM>();
Dictionary<int, List<Tuple<string, double, double>>> fundStatistics;
foreach (KeyValuePair<int, IEnumerable<FUND_PERFORMANCE>> entry in allPerformance)
{
var lastRecord = entry.Value.Where(x => x.VALUEDATE <= currentMonth).FirstOrDefault();
if (lastRecord == null) continue;
var performance = entry.Value.GroupBy(x => x.VALUEDATE.Year).ToList();
var fundTrackRecord = new FundPerformanceVM();
fundTrackRecord.FundId = entry.Key;
fundTrackRecord.FundName = entry.Value.FirstOrDefault() != null ? entry.Value.FirstOrDefault().TRACK_RECORD_HEADER.FUND.NAME_TEXT : string.Empty;
if (!performance.Any()) return fundPerformance;
foreach (var p in performance)
{
var model = new TrackRecordVM
{
Year = p.Key,
Jan = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 1) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 1).MTD : null),
Feb = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 2) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 2).MTD : null),
Mar = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 3) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 3).MTD : null),
Apr = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 4) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 4).MTD : null),
May = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 5) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 5).MTD : null),
Jun = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 6) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 6).MTD : null),
Jul = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 7) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 7).MTD : null),
Aug = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 8) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 8).MTD : null),
Sep = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 9) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 9).MTD : null),
Oct = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 10) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 10).MTD : null),
Nov = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 11) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 11).MTD : null),
Dec = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 12) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 12).MTD : null),
YTD = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 12) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 12).YTD : null),
Bmrk = (double?)(p.FirstOrDefault(x => x.VALUEDATE.Month == 12) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 12).BENCHMK1_MTD : null),
BmrkName = p.FirstOrDefault(x => x.VALUEDATE.Month == 12) != null ? p.FirstOrDefault(x => x.VALUEDATE.Month == 12).BENCHMK1_INDEX_NAME : null
};
fundTrackRecord.TrackRecord.Add(model);
}
fundPerformance.Add(fundTrackRecord);
fundStatistics = GetRiskMatrixByFunds(fundPerformance);
fundPerformance.Add(fundStatistics);
}
return fundPerformance;
}
GetRiskMatrixByFunds 方法
private Dictionary<int, List<Tuple<string, double, double>>> GetRiskMatrixByFunds(List<FundPerformanceVM> fundTrackRecord)
{
Dictionary<int, IEnumerable<double>> returnsList = new Dictionary<int, IEnumerable<double>>();
Dictionary<int, List<Tuple<string, double, double>>> list = new Dictionary<int, List<Tuple<string, double, double>>>();
List<Tuple<string, double, double>> list1 = null;
RiskMatrix riskMatrix = new RiskMatrix();
List<TrackRecordVM> trackRecordVm;
int fundId;
(double Monthly, double Annual) arithmeticMean;
(double Monthly, double Annual) averageGain;
(double Monthly, double Annual) averageLoss;
foreach (var trackRecord in fundTrackRecord)
{
trackRecordVm = trackRecord.TrackRecord;
fundId = trackRecord.FundId;
var jan = trackRecordVm.Select(x => x.Jan).ToList();
var feb = trackRecordVm.Select(x => x.Feb).ToList();
var mar = trackRecordVm.Select(x => x.Mar).ToList();
var apr = trackRecordVm.Select(x => x.Apr).ToList();
var may = trackRecordVm.Select(x => x.May).ToList();
var jun = trackRecordVm.Select(x => x.Jun).ToList();
var jul = trackRecordVm.Select(x => x.Jul).ToList();
var aug = trackRecordVm.Select(x => x.Aug).ToList();
var sep = trackRecordVm.Select(x => x.Sep).ToList();
var oct = trackRecordVm.Select(x => x.Oct).ToList();
var nov = trackRecordVm.Select(x => x.Nov).ToList();
var dec = trackRecordVm.Select(x => x.Dec).ToList();
var monthData = new List<double?>();
monthData.AddRange(jan);
monthData.AddRange(feb);
monthData.AddRange(mar);
monthData.AddRange(apr);
monthData.AddRange(may);
monthData.AddRange(jun);
monthData.AddRange(jul);
monthData.AddRange(aug);
monthData.AddRange(sep);
monthData.AddRange(oct);
monthData.AddRange(nov);
monthData.AddRange(dec);
var finalMonthList = monthData.Where(f => f.HasValue).Select(f => f.Value);
returnsList.Add(fundId, finalMonthList);
}
解决方案
查看您的使用隐含的数据类型:
fundStatistics = GetRiskMatrixByFunds(fundPerformance);
fundStatistics
因此是 a Dictionary<int, List<Tuple<string, double, double>>>
,并且fundPerformance
是 aList<FundPerformanceVM>
fundPerformance.Add(fundStatistics);
您正在尝试将 a 添加Dictionary<int, List<Tuple<string, double, double>>>
到List<FundPerformanceVM>
显然不允许的 a 中。
目前尚不清楚这些变量与
FundPerformanceVM
类的属性之间的关系是什么,才能知道要更改什么才能使其甚至可以编译。
推荐阅读
- python - 根据另一列的条件对一列应用分组依据
- java - 如何在 JUnit5 中模拟 MapStruct 嵌套映射器
- apache-spark - Spark Left directjoin(on/off) 产生不同的结果
- xml - Google Appscript,获取 API XML 并获取孩子的孩子
- postgresql - Postgres 排除在不同表中使用 gist
- ruby-on-rails - Rails 为 public_file_server 配置回退
- ios - iTunesconnect.apple.com 上未显示“活动”选项卡
- firebase - 如何在 Firebase 实时数据库中执行大量删除
- azure - 用于迁移数百万个文件的 Azure LogicApp
- ios - 自动获取 iPhone 应用 UUID 以进行分发