Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 21.05.2018
Сообщений: 23
1

Не удаётся неявно преобразовать тип System.Linq.IQueryable<<anonymous type>> в System.Linq.IQueryable<Character>

23.05.2018, 01:45. Показов 2667. Ответов 6
Метки нет (Все метки)

Здравствуйте. Решили добавить навигацию на страницу и где-то допустили ошибку. Помогите пожалуйста разобраться.

Запрос
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public async Task<IActionResult> Characters(int page = 1)
        {
            int pageSize = 50;   // количество элементов на странице
            IQueryable<Character> source = from c in db.Character
                                           join g in db.GuildMember
                                           on c.Name equals g.Name into gg
                                           from ggg in gg.DefaultIfEmpty()
 
                                           join gs in db.Gens_Rank
                                           on c.Name equals gs.Name into gggs
                                           from ggggs in gggs.DefaultIfEmpty()
 
                                           orderby c.MasterResetCount descending, c.ResetCount descending, c.cLevel descending
                                           select new { c.Name, c.cLevel, c.MapNumber, c.ResetCount, c.MasterResetCount, c.Class, guildName = ggg.G_Name, gensName = ggggs.Family };
 
            var count = await source.Take(150).CountAsync();
            var items = await source.Skip((page - 1) * pageSize).Take(pageSize).ToListAsync();
            PageViewModel pageViewModel = new PageViewModel(count, page, pageSize);
            IndexViewModel model = new IndexViewModel
            {
                PageViewModel = pageViewModel,
                Character = items
            };
 
            return View(model);
        }

Вот собственно скрин предупреждения:
Не удаётся неявно преобразовать тип System.Linq.IQueryable<<anonymous type>> в System.Linq.IQueryable<Character>
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.05.2018, 01:45
Ответы с готовыми решениями:

LINQ(IQueryable)
Встретил в нескольких местах такие запросы: User user = (from u in _db.Users where...

Не удается неявно преобразовать тип string в System.Collection.Generic.Queue<int>
Такая во ошибка не удаеться неявно преобразовать тип string в System.Collection.Generic.Queue&lt;int&gt;...

Что лучше использовать System.Data.Linq или System.Data.sqlclient
что лучше использовать System.Data.Linq или System.Data.sqlclient для подкл к базе подскажите на...

System.Linq.Expressions.Expression
Привет всем!!! Имею две переменные System.Linq.Expressions.Expression t1...

__________________

Записывайтесь на профессиональные курсы С#-разработчиков‌
6
Wanna be serious
576 / 466 / 183
Регистрация: 31.07.2013
Сообщений: 1,679
23.05.2018, 07:44 2
Попробуйте что-то вроде этого, в 14 строке:
C#
1
select new Character() { Name = c.Name, cLevel = c.cLevel /* другие свойства класса Character */};
1
0 / 0 / 0
Регистрация: 21.05.2018
Сообщений: 23
23.05.2018, 09:34  [ТС] 3
Отчасти помогло, спасибо! Только тут пока не совсем ясно:
Не удаётся неявно преобразовать тип System.Linq.IQueryable<<anonymous type>> в System.Linq.IQueryable<Character>


Мы сделали селект всех полей таблицы Character, сработало. Теперь нужно это же их Name выбрать в GuildMember Gens_Rank.
0
0 / 0 / 0
Регистрация: 21.05.2018
Сообщений: 23
23.05.2018, 23:06  [ТС] 4
Добрый вечер. Проблема не решилась.
0
Wanna be serious
576 / 466 / 183
Регистрация: 31.07.2013
Сообщений: 1,679
24.05.2018, 05:17 5
That_, судя по скриншоту, проблема в том, что Вы пытаетесь инициализировать поля, которых нет в вашем классе Character. Выхода два: либо добавлять требуемые поля в Ваш класс, либо переосмыслять запрос.
0
0 / 0 / 0
Регистрация: 21.05.2018
Сообщений: 23
24.05.2018, 14:31  [ТС] 6
Посмотрите 1й пост. Изначально было 3 таблицы, с которых получали информацию. Затем решили прикрутить пагинацию и в следствии чего пришлось запрос немного переделывать. И как следствие - сейчас не можем дотянуться до некоторых полей, которые лежат в других таблицах.
0
Wanna be serious
576 / 466 / 183
Регистрация: 31.07.2013
Сообщений: 1,679
25.05.2018, 02:42 7
В общем, стоит вернуться к истокам. Строку:
C#
1
IQueryable<Character> source = from c in db.Character
заменить на:
C#
1
var source = from c in db.Character
Верните проекцию анонимного типа:
C#
1
select new { c.Name, c.cLevel, c.MapNumber ...
И после запроса, конструируйте три новых объектов на основании тех данных, что были получены из запроса:
C#
1
2
3
4
5
6
7
8
9
Character[] characters = new Character[]
{
    new Character() { Name = source.Name[0], /* другие свойства */ },
    ...
};
GuildMember[] guildMembers = new GuildMember[]
{
    new GuildMember() { /* инициализация ваших классов */ },
};
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.05.2018, 02:42

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Ошибка при попытке using System.Linq;
Почему в некоторых решениях при подключении System.Linq; выдается сообщение: В то время как в...

Почему System.Char не может быть неявно преобразован к System.Int16?
Почему System.Char не может быть неявно преобразован к System.Int16? Почему только в его...

Используется Take() из System.Linq; нужна альтернатива в .NET 2.0
Здраствуйте! Изпользуется Take() из System.Linq;, нужна альтернатива в .NET 2.0 Естя какие...

Подключить System.XML.Linq.dll к проекту
Всем доброго времени суток! Сразу оговорюсь в C# я новичок, так что если что - не пинать....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.