C# 如何将字符串移动到ViewModel中
我正在创建一个新的ViewModel,它汇总调查结果,对数据执行一些计算,然后将新计算返回到视图。我不知道如何在集合中包含常规的“字符串”数据C# 如何将字符串移动到ViewModel中,c#,asp.net-mvc-3,linq,entity-framework,linq-to-entities,C#,Asp.net Mvc 3,Linq,Entity Framework,Linq To Entities,我正在创建一个新的ViewModel,它汇总调查结果,对数据执行一些计算,然后将新计算返回到视图。我不知道如何在集合中包含常规的“字符串”数据 var data = from SurveyResponseModel in db.SurveyResponseModels group SurveyResponseModel by SurveyResponseModel.MemberId into resultCount
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。包含changesotherresult=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; }
}
你需要:
ChangesOthersResult = db.SurveyResponseModels.Select(r => r.ChangesOthers)
或者选择many
。最后,根据更改结果的类型和实际要选择的内容,在末尾添加FirstOrDefault()
Select
为您提供了一个“集合集合”(我假设ChangesOthers
是一种集合类型)SelectMany
changesother
集合的泛型类型的“扁平集合”。在Select
之后添加FirstOrDefault()
编辑
在您提供了类之后,我看到changesother
和changesotherresult
不是集合,只是类型string
。因此,这条线应该是:
ChangesOthersResult = db.SurveyResponseModels.Select(r => r.ChangesOthers)
.FirstOrDefault()
你能公布你得到的准确错误吗?顺便说一句,你这里有两个点SurveyResponseModels。。。这是复制/粘贴错误吗?哎呀,现在应该修复了。我得到的错误是“不能隐式地将'string'类型转换为'bool'”,我想我已经接近了。。。现在我得到一个错误,说无法将类型“System.Linq.IQueryable”隐式转换为“string”。这是因为我的ViewModel中的数据类型不正确吗?@user547794:可能。您能否在问题中同时显示ResultsViewModel
和SurveyResponseModel
实体类型?好的,我已经更新了问题以包括模型和ViewModel@user547794:顺便问一下:您确定不想使用分组变量resultCount
?您的查询统计整个表中的元素,对于每个相同的组,而不是每个组中的元素。您完全正确,我的意思是使用resultCount。仍在努力掌握LINQ to实体。我感谢你的帮助!