Невозможно неявно преобразовать тип «System.Collections.Generic.List‹AnonymousType#1›» в «System.Collections.Generic.List‹AnonymousType#2›»

я столкнулся с одной ошибкой времени компиляции, например

Cannot implicitly convert type 'System.Collections.Generic.List<AnonymousType#1>' to 'System.Collections.Generic.List<AnonymousType#2>'

вот мой код:

var query = Enumerable.Repeat(new
            {
                        Id = default(int),
                        Name = string.Empty,
                        type_id = default(int),
                        Ownername = string.Empty,
                        Ownermob = string.Empty,
                        ContactPerson = string.Empty,
                        ContactPersonmob = string.Empty,
                        Phone = string.Empty,
                        Mobile = string.Empty,
                        Room = string.Empty,
                        Build = string.Empty,
                        Road = string.Empty,
                        Area = string.Empty,
                        City = string.Empty,
                        country_id = default(int?),
                        state_id = default(int?),
                        Email = string.Empty,
                        Remark = string.Empty,
                        UserOFC = default(bool),
                        UserVAT = default(bool),
                        UserINV = default(bool),
                        UserNone = default(bool),
                        Username = string.Empty,
                        Register_Date = default(DateTime)},0).ToList();

                    query = db.Parties.Where(p => p.type_id.Equals(GroupByENTYPE)).OrderByDescending(p => p.Register_Date).Select(p => new
                    {
                        Id = p.Id,
                        Name = p.Name,
                        type_id = p.type_id,
                        Ownername = p.Ownername,
                        Ownermob = p.Ownermob,
                        ContactPerson = p.ContactPerson,
                        ContactPersonmob = p.ContactPersonmob,
                        Phone = p.Phone,
                        Mobile = p.Mobile,
                        Room = p.Room,
                        Build = p.Build,
                        Road = p.Road,
                        Area = p.Area,
                        City = p.City,
                        country_id = p.country_id,
                        state_id = p.state_id,
                        Email = p.Email,
                        Remark = p.Remark,
                        UserOFC = p.UserOFC,
                        UserVAT = p.UserVAT,
                        UserINV = p.UserINV,
                        UserNone = p.UserNone,
                        Username = db.Users.Where(u => u.Ref_no.Equals(p.User_id)).Select(u => u.Username).FirstOrDefault(),
                        Register_Date = p.Register_Date
                    }).FilterForColumn(ColumnName, SearchText).ToList();//here error occurs
                }

здесь для объявления общей части запроса и назначения ее в нескольких условиях. в части FilterColumn возникла ошибка времени компиляции. однако на другой странице такое же объявление не вызывает никаких проблем.

здесь я помещаю схему таблицы, которая дает знания:

------------------------------------Обновлено------------------------ ----------------

Id  int Unchecked
Name    varchar(50) Unchecked
type_id int Unchecked
Ownername   varchar(50) Checked
Ownermob    nchar(10)   Checked
Room    varchar(10) Checked
Build   varchar(50) Checked
Road    text    Checked
Area    text    Checked
City    varchar(50) Checked
Phone   nchar(10)   Checked
Mobile  nchar(10)   Checked
Email   varchar(100)    Checked
ContactPerson   varchar(50) Checked
ContactPersonmob    nchar(10)   Checked
UserOFC bit Checked
UserVAT bit Checked
UserINV bit Checked
UserNone    bit Checked
state_id    int Checked
country_id  int Checked
Remark  text    Checked
Register_Date   smalldatetime   Unchecked
User_id char(14)    Unchecked

пожалуйста, помогите мне...


person Shal    schedule 12.05.2014    source источник
comment
Я сильно подозреваю, что один из ваших типов свойств неверен. Мы не можем сказать этого, ничего не зная о типе вашей вечеринки. Внимательно смотрите на каждое отдельное свойство или избавляйтесь сразу от нескольких, пока не скомпилируете его.   -  person Jon Skeet    schedule 12.05.2014
comment
да это char(14) как строка   -  person Shal    schedule 12.05.2014
comment
@JonSkeet просто посмотрите мой обновленный вопрос.   -  person Shal    schedule 12.05.2014
comment
Было бы намного понятнее, если бы вы указали типы CLR из сгенерированного кода модели, т. е. типы p.Ownername и т. д. В конце концов, это то, чем будет заниматься компилятор.   -  person Jon Skeet    schedule 12.05.2014
comment
Итак, вам нужны классы LINQtoSQL для каждого свойства Подробная информация о типе ??   -  person Shal    schedule 12.05.2014
comment
Что ж, я бы предпочел, чтобы вы посмотрели на каждое свойство самостоятельно. Вы можете просто навести указатель мыши на каждое свойство во втором запросе и сравнить его с типом, который вы используете в своем вызове Enumerable.Range...   -  person Jon Skeet    schedule 12.05.2014
comment
Хорошо, я понял, что все поля bool обнуляемы, поэтому по умолчанию (bool?).   -  person Shal    schedule 12.05.2014
comment
Спасибо, ребята, я решил это ..   -  person Shal    schedule 12.05.2014


Ответы (2)


По простому тексту плохо видно. Попробуйте использовать бинарный поиск, чтобы найти несовместимые свойства. То есть

  1. закомментируйте свойства последней половины, чтобы увидеть, возникают ли несовместимости в свойствах первой половины.
  2. Если компилятор по-прежнему сообщает об ошибках, сделайте то же самое для свойств первой половины.
  3. Если компилятор не сообщает об ошибках, сделайте то же самое для свойств последней половины.
person qxg    schedule 12.05.2014

Свойства ваших анонимных типов выглядят одинаково, поэтому я думаю, что один из ваших типов по умолчанию отличается от фактических типов, используемых, когда у вас есть объект для использования.

Я думаю, что лучшей стратегией для решения этой проблемы было бы использование шаблона Null Object


Ресурсы:

person Avi Turner    schedule 12.05.2014
comment
Как здесь помогает паттерн Null Object? - person sloth; 12.05.2014
comment
@sloth Вместо назначения default(int) и String.Empty он может использовать нулевой объект, и он будет следить за правильностью типов. Я согласен, что это не классическое использование, но это лучше, чем попытка в вопросе. - person Avi Turner; 12.05.2014
comment
Очень сложное решение. - person Shal; 12.05.2014
comment
Вы говорите не об использовании нулевого объекта, а просто об использовании обычного класса вместо анонимного типа. - person sloth; 12.05.2014
comment
@sloth нет, я предлагаю нулевой объект, который будет действовать как объект Party во втором запросе. - person Avi Turner; 12.05.2014