【问题标题】:How to move string into ViewModel如何将字符串移动到 ViewModel
【发布时间】:2012-06-22 16:04:50
【问题描述】:

我正在创建一个新的 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), 的部分应该只从模型中选择字符串并传递给视图模型。我目前收到有关从字符串类型更改为布尔类型的语法错误。我不确定这是什么语法。

    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; }


    }

【问题讨论】:

  • 你能发布你得到的确切错误吗?
  • 顺便说一句,你这里有两个点SurveyResponseModels..First...这是复制/粘贴错误吗?
  • 糟糕,现在应该修复了。我得到的错误是“无法将类型'string'隐式转换为'bool'”

标签: c# asp.net-mvc-3 linq entity-framework linq-to-entities


【解决方案1】:

你需要:

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

SelectMany。最后根据ChangesOthersResult 的类型以及您实际要选择的类型,在末尾添加FirstOrDefault()

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

编辑

在您提供类之后,我发现ChangesOthersChangesOthersResult 不是集合,而只是string 类型。所以该行应该是:

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

【讨论】:

  • 觉得我快接近了...现在我收到一条错误消息,提示“无法将类型 'System.Linq.IQueryable' 隐式转换为 'string'。这是因为我的 ViewModel 中的数据类型不正确?
  • @user547794:也许吧。您能否在问题中也显示ResultsViewModelSurveyResponseModel 实体类型?
  • 好的,我已经更新了问题以包括模型和视图模型
  • @user547794:顺便说一句:您确定不想使用分组变量resultCount?您的查询计算整个表中的元素,每个组都相同,而不是每个组中的元素。
  • 你说得对,我的意思是使用 resultCount。仍在尝试掌握 LINQ to Entities。感谢您的帮助!
猜你喜欢
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多