如何将字符串移动到ViewModel中

时间:2012-06-22 16:04:51

标签: 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
                       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; }


    }

1 个答案:

答案 0 :(得分:2)

你需要:

ChangesOthersResult = db.SurveyResponseModels.Select(r => r.ChangesOthers)

SelectMany。最后在最后添加FirstOrDefault(),具体取决于ChangesOthersResult的类型以及您实际想要选择的内容。

Select为您提供了“集合集合”(我假设ChangesOthers是集合类型)。 SelectMany ChangesOthers集合的通用类型的“扁平集合”。在FirstOrDefault()之后添加Select会为您提供第一个SurveyResponseModels实体的单个集合 - 或null

修改

提供课程后,我发现ChangesOthersChangesOthersResult不是集合,只是string类型。所以该行应该是:

ChangesOthersResult = db.SurveyResponseModels.Select(r => r.ChangesOthers)
    .FirstOrDefault()