我在使用.Net / EF Core时出现问题,我的一个视图模型构造函数中的select语句在运行时:Property 'System.String Name' is not defined for type 'Microsoft.EntityFrameworkCore.Storage.ValueBuffer'
返回以下错误。
我已经尝试评论出我怀疑造成这个问题的路线并将其缩小到那个范围,但我无法弄清楚我正在做什么是错的。
以下是导致错误的表达式:
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);
}
答案 0 :(得分: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();
答案 1 :(得分: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
对象---由于该混乱中的错误括号而可能出现的情况。