Невозможно привести объект типа «<> f__AnonymousType1`2 [System.Int64, System.String]» к типу «ConsoleApplication1.Profile». - PullRequest
3 голосов
/ 14 октября 2011

Я очень новичок в работе с Linq и Entity, у меня проблема с кодом ниже.Я получаю сообщение об ошибке

Невозможно привести объект типа '<> f__AnonymousType1`2 [System.Int64, System.String]' к типу 'ConsoleApplication1.Profile'

.

Мой код:

static void Main(string[] args)
        {
            ProfileEntitiesContext obj = new ProfileEntitiesContext();
            List<Profile> list = new List<Profile>();
            var test = (from c in obj.Customer
                       join a in obj.Address
                       on c.ProfileId
                       equals a.Customer.ProfileId 
                       select new
                       {
                           CustomerProfileId = c.CustomerProfileId,
                           FirstName = c.FirstName
                   AddressLine1 = a.Line1   
                       }).ToList().Cast<CustomerConfidentialProfile>();

foreach(var cust in test) // Unable to cast object of type  '<>f__AnonymousType1`2
//[System.Int64,System.String]' to type 'ConsoleApplication1.Profile'.
            {
                list.Add(cust);
            }
        }

public class Profile
    {
        int _CustomerProfileId;
        string _FirstName;
        string _AddressLine1;


        public int CustomerProfileId
        {
            get { return _CustomerProfileId; }
            set { _CustomerProfileId = value; }
        }


        public string FirstName
        {
            get { return _FirstName; }
            set { _FirstName = value; }
        }

  public string AddressLine1
        {
            get { return _AddressLine1; }
            set { _AddressLine1= value; }
        }
}

Любая помощь будет оценена.

Ответы [ 3 ]

8 голосов
/ 14 октября 2011

Ваша проблема в том, что из LINQ-запроса вы возвращаете анонимный тип (используя синтаксис new { ... }.

Однако вы пытаетесь замять этот объект в List<Profile>. Поэтому он жалуется, что вы пытаетесь поместить этот анонимный объект в список, который принимает только Profile объектов.

Почему бы просто не заменить new { ... на new Profile { ..., поскольку вы используете те же поля в анонимном типе, что и в типе профиля.

И удалить ToList и Cast в конце.

3 голосов
/ 14 октября 2011

Это потому, что анонимный тип <>f__AnonymousType1'2 [System.Int64,System.String] НЕ является профилем!(не экземпляр и не экземпляр предка).Попробуйте заменить ваш выбор следующим образом:

select new CustomerConfidentialProfile
{
CustomerProfileId = c.CustomerProfileId,
FirstName = c.FirstName,
AddressLine1 = a.Line1,
property assignments go futher   
})
1 голос
/ 14 октября 2011

Вы не можете привести анонимный тип к именованному типу. Но вы можете создать именованный тип напрямую:

select new CustomerConfidentialProfile()
                   {
                       CustomerProfileId = c.CustomerProfileId,
                       FirstName = c.FirstName
               AddressLine1 = a.Line1   
                   }).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...