2016-07-22 9 views
2

.Net/EFコアで問題が発生しました。ビューモデルのコンストラクタのselectステートメントがで次のエラーを返しています。Property 'System.String Name' is not defined for type 'Microsoft.EntityFrameworkCore.Storage.ValueBuffer'ランタイム。Linqクエリのランタイムエラー

問題の原因と思われる行をコメントアウトし、それを絞り込んだりしていますが、私がやっていることに何が間違っているのか分かりません。エラーを引き起こして表現され、次の

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(); 

および特定の行は、私がここで行方不明です何

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") 

のですか?

注:照会されているデータベースは完全に空です。レコードのチェックがfalseを返すと、三元表現の戻りが

編集「割り当てなし」にする必要があります。

次のようにTeamAssignmentクラスは次のとおりです。

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

とクラスがあるチームこれは:

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

チームクラスを表示する –

+0

これは実行時エラーですか? – user3185569

+0

@ user3185569はい、そうです。 – Ceshion

答えて

0

まず、わかりやすいクエリを作成しましょうこれは.....

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(); 

最初に動作するかどうかを確認してください。同じエラーが表示されます。 ...エラーValueBufferを参照し、私は事.Nameが接続されていることを推測するつもりが原因という混乱で紛失括弧にTeamオブジェクト---可能性はないので

1

私が使用してこれを解決して参加します(左外部結合のために編集された):

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();