GPGVM
GPGVM

Reputation: 5619

Linq Invalid Cast Exception Same Object Type

I wrote this query and as my understanding of the business rules has improved I have modified it.

In this most recent iteration I was testing to see if indeed I had some redundancy that could be removed. Let me first give you the query then the error.

public List<ExternalForums> GetAllExternalForums(int extforumBoardId)
{
    List<ExternalForums> xtrnlfrm = new List<ExternalForums>();

    var query = _forumExternalBoardsRepository.Table
        .Where(id => id.Id == extforumBoardId)
        .Select(ExtForum => ExtForum.ExternalForums);
    foreach (ExternalForums item in query)
    {
        xtrnlfrm.Add(new ExternalForums { Id = item.Id  , ForumName = item.ForumName, ForumUrl = item.ForumUrl });
    }

    return xtrnlfrm;
}

Now in case it isn't obvious the query select is returning List of ExternalForums. I then loop through said list and add the items to another List of ExternalForums object. This is the redundancy I was expecting to remove.

Precompiler was gtg so I ran through it one time to very everything was kosher before refactoring and ran into a strange error as I began the loop.

Unable to cast object of System.Collections.Generic.HashSet NamSpcA.NamSpcB.ExternalForums to type NamSpcA.NamSpcB.ExternalForums.

Huh? They are the same object types.

So am I doing something wrong in the way I am projecting my select?

TIA

Upvotes: 0

Views: 190

Answers (1)

MarcinJuraszek
MarcinJuraszek

Reputation: 125660

var query = _forumExternalBoardsRepository.Table
    .Where(id => id.Id == extforumBoardId)
    .Select(ExtForum => ExtForum.ExternalForums);

This query returns IEnumerable<T> where T is type of ExtForum.ExternalForums property, which I would expect to be another collection, this time of ExternalForum. And the error message matches that, saying you have IEnumerable<HashSet<ExternalForums>>.

If you need that collection of collections to be flattened into one big collection of ExternalForums use SelectMany instead:

var query = _forumExternalBoardsRepository.Table
    .Where(id => id.Id == extforumBoardId)
    .SelectMany(ExtForum => ExtForum.ExternalForums);

Upvotes: 1

Related Questions