Linq查询中“属性未定义”运行时错误
问题描述:
我在使用.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);
}
答
首先,让我们做一个合理的查询这个......
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
对象---可能是由于在一个混乱错位括号...
答
我通过加入作为解决这个(编辑为左外连接):
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();
显示团队类请 –
这是一个运行时错误? – user3185569
@ user3185569是的。 – Ceshion