Задать вопрос
@sdfdgfhgfh

Не удается неявно преобразовать тип “string”?

Был простенький запрос на извлечение списка по убыванию из базы с пагинацией и поиском на странице:

spoiler
public async Task<IActionResult> Online(string name, int page = 1)
        {
            int pageSize = 30;   // количество элементов на странице                            

            IQueryable<Chr> source = from c in db.Chr
                                           orderby c.RCount, c.Level
                                           select new Chr()
                                           {
                                               Name = c.Name,
                                           };

            if (!String.IsNullOrEmpty(name))
            {
                source = source.Where(p => p.Name.Contains(name));
            }

            var count = await source.CountAsync();
            var items = await source.Skip((page - 1) * pageSize).Take(pageSize).ToListAsync();

            // формируем модель представления
            IndexViewModel model = new IndexViewModel
            {
                PageViewModel = new PageViewModel(count, page, pageSize),
                FilterViewModel = new FilterViewModel(db.Chr.ToList(), name),
                Chr = items
            };

            return View(model);
        }



IndexViewModel:

spoiler
public class IndexViewModel
    {
        public IEnumerable<Chr> Chr { get; set; }           
        public PageViewModel PageViewModel { get; set; }
        public FilterViewModel FilterViewModel { get; set; }       
    }



Недавно понадобилось взять ещё одну таблицу из базы. Что сделал я:

spoiler
public async Task<IActionResult> Online(string name, int page = 1)
        {
            int pageSize = 30;   // количество элементов на странице                            

            IQueryable<Chr> source = from c in db.Chr
                                           join g in db.GMember
                                           on c.Name equals g.Name into gg
                                           from ggg in gg.DefaultIfEmpty()

                                           orderby c.RCount, c.Level
                                           select new IndexViewModel()
                                       {
                                           Chr = c.Name,
                                           GMember = ggg.G_Name
                                       };


            if (!String.IsNullOrEmpty(name))
            {
                source = source.Where(p => p.Name.Contains(name));
            }

            var count = await source.CountAsync();
            var items = await source.Skip((page - 1) * pageSize).Take(pageSize).ToListAsync();

            // формируем модель представления
            IndexViewModel model = new IndexViewModel
            {
                PageViewModel = new PageViewModel(count, page, pageSize),
                FilterViewModel = new FilterViewModel(db.Chr.ToList(), name),
                Chr = items
            };

            return View(model);
        }



В итоге я получаю 2 ошибки:

Не удается неявно преобразовать тип "string" в "System.Collections.Generic.IEnumerable<Web.Models.DataBase.Chr>"

Не удается неявно преобразовать тип "string" в "System.Collections.Generic.IEnumerable<Web.Models.GMember>"


В строках

Chr = c.Name,
GMember = ggg.G_Name


Подскажите пожалуйста, что я сделал не правильно.
  • Вопрос задан
  • 837 просмотров
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@hutamari
Во первых в последнем примере кода должно быть:
IQueryable<ItemViewModel> = .... new ItemViewModel()

вместо
IQueryable<Chr> = .... new ItemViewModel()

Во вторых идёт присваивание в IEnumerable переменной с типом string, вместо этого:
select new SomeType()
                                       {
                                           Chr = new Chr{ Name = c.Name},
                                           GMember = new GMember { Name = ggg.G_Name}
                                       };
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы