No se puede convertir el objeto de tipo 'System.Linq.Expressions.FieldExpression' para escribir 'System.Linq.Expressions.ParameterExpression

entity-framework entity-framework-core linq

Pregunta

Estoy utilizando Entity Framework rc1-final en ASP.NET5.

Tengo la siguiente tabla.

public class PlayerComment 
{
    [Key]
    public int Id { get; set; }

    public int? PeriodId { get; set; }

    [ForeignKey("PeriodId")]
    public Period Period { get; set; }

    public int? PlayerId { get; set; }
    [ForeignKey("PlayerId")]
    public Player Player { get; set; 
    public DateTime? CommentDate { get; set; }

    public string Comment { get; set; }

}

PlayerComment está vinculado a Player que está vinculado a SubGroup que está vinculado a Group

Tengo la siguiente consulta de LINQ

public class PlayerComment 
{
    [Key]
    public int Id { get; set; }

    public int? PeriodId { get; set; }

    [ForeignKey("PeriodId")]
    public Period Period { get; set; }

    public int? PlayerId { get; set; }
    [ForeignKey("PlayerId")]
    public Player Player { get; set; 
    public DateTime? CommentDate { get; set; }

    public string Comment { get; set; }

}

Esto funciona correctamente.

Cada comentario cae en un período, por lo que en mi salida necesito incluir el período, así que agrego el .Include("Period")

así mi código se ve así

public class PlayerComment 
{
    [Key]
    public int Id { get; set; }

    public int? PeriodId { get; set; }

    [ForeignKey("PeriodId")]
    public Period Period { get; set; }

    public int? PlayerId { get; set; }
    [ForeignKey("PlayerId")]
    public Player Player { get; set; 
    public DateTime? CommentDate { get; set; }

    public string Comment { get; set; }

}

Sin embargo ahora lanza una excepción de tiempo de ejecución y me da:

"No se puede convertir el objeto de tipo 'System.Linq.Expressions.FieldExpression' para escribir 'System.Linq.Expressions.ParameterExpression'".

Leí en github, hay un problema con OrderBy da el error, pero ni siquiera estoy usando order by.

¿Hay alguna solución que pueda usar para arreglar esto?

Parece que lo he reducido gracias a la respuesta proporcionada por @octavioccl.

Cambiando mi código a esto:

public class PlayerComment 
{
    [Key]
    public int Id { get; set; }

    public int? PeriodId { get; set; }

    [ForeignKey("PeriodId")]
    public Period Period { get; set; }

    public int? PlayerId { get; set; }
    [ForeignKey("PlayerId")]
    public Player Player { get; set; 
    public DateTime? CommentDate { get; set; }

    public string Comment { get; set; }

}

Todas las combinaciones funcionan, excepto cuando selecciono GroupId y mantengo los otros null . Dado que el SubGroup funciona, solo puedo deducir que es un problema cuando se usa una inclusión y se usa en los niveles de la cláusula 3.

Respuesta popular

Debería intentar llamar al método Include en el DbSet en el que desea cargar la entidad relacionada:

 var table = (from pc in _db.PlayerComments.Include(p => p.Period)
              //...

Y creo que su consulta sería más simple si usara propiedades de navegación en lugar de uniones explícitas:

 var table = (from pc in _db.PlayerComments.Include(p => p.Period)
              //...

Actualizar

Intente mover las condiciones donde verifica si los parámetros son null fuera de su consulta.

 var table = (from pc in _db.PlayerComments.Include(p => p.Period)
              //...



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué