Странное исключение LINQ To Entities

Я использую оператор LINQ, который выбирает из различных таблиц информацию, необходимую мне для заполнения записей стиля Post/Post Comment. Я получаю забавное исключение, говоря, что объект должен реализовать IConvertible, когда я пытаюсь перебрать набор записей. Смешная часть этого заключается в том, что она возникает, только когда анонимный тип, который я использую для хранения данных, содержит более двух общих коллекций.

//select friend timeline posts posts
var pquery = from friend in fquery
    join post in db.game_timeline on friend.id equals post.user_id
    //join user in db.users on post.friend_id equals user.id into userGroup
    //join game in db.games on post.game_id equals game.game_id into gameGroup
    select new
    {
        Friend = friend,
        Post = post,

        Game = from game in db.games
          where game.game_id == post.game_id
          select game,

        Recipient = from user in db.users
          where user.id == post.user_id
          select user,

        Comments = from comment in db.timeline_comments
          where comment.post_id == post.id
          join users in db.users on comment.user_id equals users.id
          select new { User = users, Comment = comment }
    };

(Примечание. Я использую коннектор/сеть MYSQL, поэтому такие вещи, как Take и FirstOrDefault, и подобные вещи не поддерживаются в самих операторах LINQ, я решил использовать эти методы во время итерации, поскольку там не возникает исключение)

Проблема заключается в том, что все 3 поля (Игра, Получатель и Комментарии) присутствуют. Я получаю исключение "Объект должен реализовать IConvertible". НО, если я удалю ЛЮБОЕ одно из трех назначений полей (неважно, какой из них), он работает нормально. Кто-нибудь знает, что здесь происходит?

Спасибо заранее!

Райан.

Ответ 1

Это предположение, но я думаю ваш анонимный тип может пытаться duck-type перечислить когда у вас есть более двух запросов. Если это произойдет, вы получите эту жалобу о том, что не реализуете IConvertible, поскольку enum реализует IConvertible, а ваш анонимный тип (теперь derrived from enum) не реализует интерфейс.