开发者

Unable to cast object of type '<>f__AnonymousType1`2 [System.Int64,System.String]' to type 'ConsoleApplication1.Profile'.

I very new to Linq and Entity frame work, i have problem with my below code. I am getting error

Unable to cast object of type '<>f__AnonymousType1`2 [System.Int64,System.String]' to type 'ConsoleApplication1.Profile'

.

My Code is:

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; }
        }
}

Any help will be appreciated.


Your problem is that from the LINQ-query you are returning a anonymous type ( by using the new { ... } syntax.

However, you try to jam this object into a List<Profile>. So it's complaining that you are trying to put this anonymous object into a List that only takes Profile objects.

Why just not replace new { ... with new Profile { ... since you are using the same fields in the anonymous type as you do in the Profile type.

And remove ToList and Cast at the end as well.


Thats because the anonymous type <>f__AnonymousType1'2 [System.Int64,System.String] IS NOT Profile! (not an instance and not an instance of ancestor). Try to replace your select like this:

select new CustomerConfidentialProfile
{
CustomerProfileId = c.CustomerProfileId,
FirstName = c.FirstName,
AddressLine1 = a.Line1,
property assignments go futher   
})


You can't cast an anonymous type to a named type. But you can construct a named type directly:

select new CustomerConfidentialProfile()
                   {
                       CustomerProfileId = c.CustomerProfileId,
                       FirstName = c.FirstName
               AddressLine1 = a.Line1   
                   }).ToList();
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜