2015-02-20 3 views
4

Я хочу заполнить viewmodel свойством DateTime, а также список категорий.Невозможно неявно преобразовать тип в 'System.Collections.Generic.List

ViewModel:

public class TourCategoryVM 
{ 
    public DateTime Date { get; set; } 
    public List<TourCategoryList> TourCategoryList { get; set; } 
} 

public class TourCategoryList 
{ 
    public int TourCategoryId { get; set; } 
    public string TourType { get; set; } 
} 

модель домена:

public class TourCategory 
{ 
    public int TourCategoryId { get; set; } 
    public string TourType { get; set; } 
    public virtual ICollection<Tour> Tour { get; set; } 
} 

Я думал, что я мог бы заполнить его легко с этим кодом:

 var viewModel = new TourCategoryVM(); 
     viewModel.TourCategoryList = db.TourCategories(); 

Однако, я получаю ошибка:

Error 1 Cannot implicitly convert type
System.Data.Entity.DbSet<tb.Models.TourCategory> to
System.Collections.Generic.List<tb.Models.ViewModels.TourCategoryList>

Это моя модель ViewModel, это неправильно?

+0

попробовать добавить .tolist() к вашему db.tourcategories() –

+0

Спасибо Matt - Я пробовал, но получил: Non-Invocable члена «tb.Models.tbContext.TourCategories» не может быть использован как метод – Mark

+0

В будущем использовать «backticks» для окружения текста, который включает в себя «», который не находится в кодовом блоке, веб-сайт будет лишать их, если вы не думаете, что это html-теги. –

ответ

7

db.TourCategories() метод не возвращает коллекцию TourCategoryList, так что вам придется сделать немного больше работы, чтобы преобразовать любой класс TourCategories() возвращается в TourCategoryList, используя метод LINQ Select().

viewModel.TourCategoryList = db.TourCategories() 
           .Select(tc => new TourCategoryList 
              { 
               TourCategoryId = tc.TourCategoryId, 
               TourType = tc.TourType 
              }) 
           .ToList(); 

Я предполагаю, что TourCategories() возвращает коллекцию TourCategory.


Если бы я мог сделать еще одно предложение, вы можете захотеть переименовать TourCategoryList. Я знаю, что вы пытаетесь отличить его от другого класса TourCategory, но кто-то, смотрящий на ваш код, может предположить (на первый взгляд), что List<TourCategoryList> - это список списков, только от имени.

+1

'TourCategoryModel' - это традиционный выбор для другого имени класса. – krillgar

+0

@Mark Попробуйте удалить круглые скобки. Измените 'TourCategories()' на 'TourCategories' и посмотрите, избавляется ли эта ошибка. –

+0

Спасибо Grant - я сделал это, а также переименовал TourCategoryList в TourCategoryModel - но теперь есть еще одна ошибка: сущность или сложный тип «tb.Models.TourCategoryModel» не может быть сконструирован в запросе LINQ to Entities. Поэтому я добавил .ToList() после dbTourCategories(), и он сработал! Большое спасибо за вашу помощь. отметка – Mark

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