2016-07-22 53 views
2

我在使用.Net/EF Core时遇到问题,我的一个视图模型构造函数中的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(); 
相关问题