Pregunta Strange LINQ to Entities Exception


Estoy usando una declaración LINQ que selecciona de varias tablas la información que necesito para completar algunos registros de estilo Post / Post Comment. Recibo una graciosa excepción que dice que el objeto debe implementar IConvertible cuando intento iterar el conjunto de registros. Lo gracioso de esto es que parece ocurrir solo cuando el tipo anónimo que estoy usando para contener los datos contiene más de 2 colecciones genéricas.

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

(Nota: estoy usando MYSQL Connector / Net para que cosas como Take y FirstOrDefault y cosas por el estilo no sean compatibles con las propias declaraciones LINQ, he optado por utilizar esos métodos durante la iteración, ya que no genera una excepción allí)

El problema es cuando los 3 campos (Juego, Destinatario y Comentarios) están presentes. Obtengo la excepción "El objeto debe implementar IConvertible". PERO si elimino CUALQUIERA de las 3 asignaciones de campo (no importa cuál), funciona bien. ¿Alguien sabe lo que está pasando aquí?

¡Gracias por adelantado!

Ryan.


32
2018-05-05 20:10


origen


Respuestas:


Esto es una suposición, pero yo pensar su tipo anónimo podría estar intentando pato tipo a una enumeración cuando tienes más de dos consultas. Si eso está ocurriendo, recibirá este reclamo sobre la no implementación de IConvertible, ya que enum implementa IConvertible, y su tipo anónimo (ahora derivado de enum) no implementa la interfaz.


1
2018-05-12 18:38