我正在创建一个新的ViewModel,它可以计算调查结果,执行对该数据的一些计算,然后将新计算返回到视图。我无法弄清楚如何在集合中包含常规的“字符串”数据。
var data = from SurveyResponseModel in db.SurveyResponseModels
group SurveyResponseModel by SurveyResponseModel.MemberId into resultCount
select new ResultsViewModel()
{
MemberId = resultCount.Key,
UseNewTreatmentResult = db.SurveyResponseModels.Count(r => r.UseNewTreatment),
UseBetterTechniqueResult = db.SurveyResponseModels.Count(r => r.UseBetterTechnique),
ChangesOthersResult = db.SurveyResponseModels.First(r => r.ChangesOthers),
};
return View(data);
第一部分是计算布尔响应并将它们作为整数传递回ViewModel。包含ChangesOthersResult = db.SurveyResponseModels.First(r => r.ChangesOthers),
的部分应该只从模型中选择字符串并传递给ViewModel。我目前收到有关从类型字符串更改为bool的语法错误。我不确定这是什么语法。
public class SurveyResponseModel
{
[Key]
public int ResponseId { get; set; }
public int MemberId { get; set; }
public int ProgramId { get; set; }
[DisplayName("Use a new treatment")]
public bool UseNewTreatment { get; set; }
[DisplayName("Use better/more updated technique")]
public bool UseBetterTechnique { get; set; }
[DisplayName("Other (please specify):")]
public string ChangesOthers { get; set; }
}
public class ResultsViewModel
{
public int MemberId { get; set; }
public int ProgramId { get; set; }
[DisplayName("Use a new treatment")]
public int UseNewTreatmentResult { get; set; }
[DisplayName("Use better/more updated technique")]
public int UseBetterTechniqueResult { get; set; }
[DisplayName("Other (please specify):")]
public string ChangesOthersResult { get; set; }
}
答案 0 :(得分:2)
你需要:
ChangesOthersResult = db.SurveyResponseModels.Select(r => r.ChangesOthers)
或SelectMany
。最后在最后添加FirstOrDefault()
,具体取决于ChangesOthersResult
的类型以及您实际想要选择的内容。
Select
为您提供了“集合集合”(我假设ChangesOthers
是集合类型)。 SelectMany
ChangesOthers
集合的通用类型的“扁平集合”。在FirstOrDefault()
之后添加Select
会为您提供第一个SurveyResponseModels
实体的单个集合 - 或null
。
修改强>
提供课程后,我发现ChangesOthers
和ChangesOthersResult
不是集合,只是string
类型。所以该行应该是:
ChangesOthersResult = db.SurveyResponseModels.Select(r => r.ChangesOthers)
.FirstOrDefault()