Impossibile eseguire il cast dell'oggetto di tipo 'System.Linq.Expressions.FieldExpression' per digitare 'System.Linq.Expressions.ParameterExpression

entity-framework entity-framework-core linq

Domanda

Sto usando Entity Framework rc1-final in ASP.NET5.

Ho la seguente tabella.

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 è collegato a Player che è collegato al SubGroup che è collegato al Group

Ho la seguente query 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; }

}

Funziona correttamente

Ogni commento cade in un periodo, quindi nel mio output devo includere il periodo, quindi aggiungo il .Include("Period")

quindi il mio codice è simile a questo

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

}

Tuttavia ora getta un'eccezione di runtime e mi dà:

"Impossibile eseguire il cast dell'oggetto di tipo 'System.Linq.Expressions.FieldExpression' per digitare 'System.Linq.Expressions.ParameterExpression'."

Ho letto su Github c'è un problema con OrderBy dato l'errore ma non sto nemmeno usando l'ordine.

C'è qualche soluzione che posso usare per risolvere questo problema?

Mi sembra di averlo ristretto grazie alla risposta fornita da @octavioccl.

Cambiando il mio codice a questo:

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

}

Tutte le combinazioni funzionano, tranne quando seleziono GroupId e mantengo gli altri null . Poiché il SubGroup funziona, posso solo dedurre che si tratta di un problema quando si utilizza una inclusione e si utilizza dove profondità della clausola 3 livelli.

Risposta popolare

Dovresti provare a chiamare il metodo Include nel DbSet cui vuoi caricare l'entità correlata:

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

E penso che la tua query sarebbe più semplice se usi le proprietà di navigazione invece dei join espliciti:

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

Aggiornare

Prova a spostare le condizioni in cui controlli se i parametri sono null al di fuori della tua query.

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



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché