Странное LINQ To Entity Exception - PullRequest
32 голосов
/ 06 мая 2011

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

//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 Connector / Net, поэтому такие вещи, как Take и FirstOrDefault и тому подобное, не поддерживаются в самих операторах LINQ, я решил использовать эти методы во время итерации, поскольку там не возникает исключение)

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

Заранее спасибо!

Райан.

1 Ответ

1 голос
/ 12 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...