2016-07-22 2 views
2

Ich habe ein Problem mit .Net/EF Core, eine Select-Anweisung in einem meiner Ansicht Modellkonstruktoren gibt den folgenden Fehler bei Laufzeit: Property 'System.String Name' is not defined for type 'Microsoft.EntityFrameworkCore.Storage.ValueBuffer'."Eigenschaft ist nicht definiert" Laufzeitfehler in Linq Abfrage

Ich habe versucht, die Zeile zu kommentieren, von der ich vermutete, dass sie das Problem verursacht hat, und habe mich darauf beschränkt, aber ich kann nicht herausfinden, was mit dem, was ich mache, nicht stimmt.

Das Folgende ist der Ausdruck, der den Fehler verursacht hat:

playerholder = players.Select(m => new PlayerListItem_PDMI 
      { 
       PlayerID = m.PlayerID, 
       FirstName = m.FirstName, 
       LastName = m.LastName, 
       Rating = m.Rating, 
       Assigned = m.TeamAssignments.Where(n => n.Team.League == league && n.SeasonID == SeasonID).Count() > 0, 
       TeamName = (m.TeamAssignments.Where(n => n.Team.League == league && n.SeasonID == SeasonID).Count() > 0 ? m.TeamAssignments.Where(n => n.Team.League == league && n.SeasonID == SeasonID).First().Team.Name : "Not Assigned") 
      }).ToList(); 

und die spezifische Linie ist

TeamName = (m.TeamAssignments.Where(n => n.Team.League == league && n.SeasonID == SeasonID).Count() > 0 ? m.TeamAssignments.Where(n => n.Team.League == league && n.SeasonID == SeasonID).First().Team.Name : "Not Assigned") 

Was ich hier fehlt?

Hinweis: Die abgefragte Datenbank ist vollständig leer. Die Prüfung auf Aufzeichnungen sollten false zurückgeben und den ternären Ausdruck Rückkehr machen "Nicht zugewiesen"

Edit:

Die TeamAssignment Klasse ist wie folgt:

public class TeamAssignment : IModel 
{ 
    public TeamAssignment() 
    { 

    } 

    public TeamAssignment(WWAHLContext db) 
    { 
     Season = db.Seasons.Last(); 
    } 

    [Key] 
    public int ID { get; set; } 

    public int PlayerID { get; set; } 

    public int SeasonID { get; set; } 

    public int TeamID { get; set; } 

    public int PlayerNumber { get; set; } 

    public Position Position { get; set; } 

    [ForeignKey("PlayerID")] 
    public virtual Player Player { get; set; } 

    [ForeignKey("TeamID")] 
    public virtual Team Team { get; set; } 

    [ForeignKey("SeasonID")] 
    public virtual Season Season { get; set; } 
} 

und die -Team Klasse Dies ist:

public class Team : IModel 
{ 
    public int TeamID { get; set; } 

    public int SeasonID { get; set; } 

    public League League { get; set; } 

    public string Name { get; set; } 

    public virtual TeamStats TeamStats { get; set; } 

    public virtual TeamCarousel Carousel { get; set; } 

    public virtual ICollection<GameDetails> Games { get; set; } 

    public virtual ICollection<CurrentTeam> CurrentPlayers { get; set; } 

    [NotMapped] 
    public virtual IEnumerable<Penalty> Penalties => Games.SelectMany(m => m.Penalties); 
} 
+1

Show Teamklasse bitte –

+0

Ist das ein Laufzeitfehler? – user3185569

+0

@ user3185569 Ja, ist es. – Ceshion

Antwort

0

Lassen Sie uns zunächst eine sinnvolle Abfrage machen von diesem .....

playerholder = from m in players 
      let team = m.TeamAssignments.FirstOrDefault(n => n.Team.League == league && n.SeasonID == SeasonID) 
      select new PlayerListItem_PDMI 
      { 
      PlayerID = m.PlayerID, 
      FirstName = m.FirstName, 
      LastName = m.LastName, 
      Rating = m.Rating, 
      Assigned = team != null, 
      TeamName = team != null ? team.Name : "Not Assigned") 
     }).ToList(); 

Versuchen Sie es zuerst, um zu sehen, ob es funktioniert, oder gibt den gleichen Fehler. Da der Fehler ValueBuffer verweist, werde ich erraten, dass das Dinge .Name ist an keine Team Objekt --- Möglichkeit aufgrund einer misplace Klammer in diesem Schlamassel ...

1

ich dieses Problem gelöst, indem sie als Joins folgt (für die linke Außen bearbeitet Join):

playerholder = players.GroupJoin(db.TeamAssignments, player => player.PlayerID, assignment => assignment.PlayerID, (player, assignment) => new 
     { 
      PlayerID = player.PlayerID, 
      FirstName = player.FirstName, 
      LastName = player.LastName, 
      Rating = player.Rating, 
      NameLeague = assignment.Where(m => m.SeasonID == seasonId).Join(db.Teams, assign => assign.TeamID, team => team.TeamID, (assign, team) => new 
      { 
       League = team.League, 
       Name = team.Name 
      }).Where(m => m.League == league) 
     }).Select(m => new PlayerListItem_PDMI 
     { 
      PlayerID = m.PlayerID, 
      FirstName = m.FirstName, 
      LastName = m.LastName, 
      Rating = m.Rating, 
      Assigned = m.NameLeague.Any(), 
      TeamName = (m.NameLeague.Any() ? m.NameLeague.First().Name : "Not Assigned") 
     }).ToList(); 
Verwandte Themen