2012-06-22 2 views
0

Я создаю новую ViewModel, которая подсчитывает результаты опроса, выполняет некоторые вычисления по этим данным и затем возвращает новый расчет в представление. Я не могу понять, как включить регулярные «строковые» данные в коллекции.Как перемещать строку в 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. В настоящее время я получаю синтаксическую ошибку об изменении типа string на 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

Можете ли вы высказать точную ошибку? –

+0

Кстати, у вас есть две точки: «SurveyResponseModels..First» ... Это ошибка копирования/вставки? –

+0

Упс, теперь нужно исправлять. Ошибка, которую я получаю, говорит: «Невозможно неявно преобразовать тип« строка »в« bool ». – user547794

ответ

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() 
+0

Думаю, что я приближаюсь ... Теперь я получаю сообщение об ошибке« не может неявно преобразовать тип «System.Linq.IQueryable » в 'string'. Это из-за неправильного типа данных в моей модели ViewModel? – user547794

+0

@ user547794: Возможно. Можете ли вы показать тип объекта «ResultsViewModel» и «SurveyResponseModel» в своем вопросе? – Slauma

+0

Хорошо, я обновил вопрос для включения модели и ViewModel – user547794

Смежные вопросы