views:

253

answers:

1

Hi. Like the title says, I have the following exception:

Description: Event code: 3005 Event message: An unhandled exception has occurred. Exception information: Exception type: NotSupportedException Exception message: Explicit construction of entity type 'Company.Project.Core.Domain.Friend' in query is not allowed.

I am using LINQ to SQL and have the following code in my datacontext:

var friends2 = (
    from f in dc.Friends
    where f.MyFriendsAccountId == accountId
    where f.AccountId != accountId
    select new 
    {
        f.FriendId,
        AccountId = f.MyFriendsAccountId,
        MyFriendsAccountId = f.AccountId, 
        f.CreateDate,
        f.Timestamp
    }).Distinct();

result.AddRange(
    from o in friends2
    select new Friend()
    {
        FriendId = o.FriendId, 
        AccountId = o.AccountId, 
        CreateDate = o.CreateDate, 
        MyFriendsAccountId = o.MyFriendsAccountId, 
        Timestamp = o.Timestamp
    });

the final code block is throwing the error and I am pretty sure it is this statement that is the culprit:

.Select( o => **new Friend**

How should I be reworking my code to avoid this error? Code illustration appreciated.

Thanks.

A: 

Entities that are part of the data context can not be created using a LINQ query. This is a well though design decision of the C# team. Because the entities are newed up in the Select statement would mean that they are not tracked by the DataContext and this can confuse developers. On the other hand, when the DataContext would automatically insert on submit those newed up entities, this would be confusing as well. The only option left was communicating to the developers that this is not such a good idea to do, and that is what you saw happening.

Steven
Thanks for the explanation as to why it isn't working. Now, could you illustrate how to make it work? What code do I need to change? Thanks.
Code Sherpa
Change the line `result.AddRange(from o in friends2 select` to `result.AddRange(from o in friends2.ToArray() select`.
Steven