";属性未定义“;Linq查询中的运行时错误

本文关键字:查询 Linq 运行时错误 quot 属性 未定义 | 更新日期: 2023-09-27 17:58:11

我在使用.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);
}

";属性未定义“;Linq查询中的运行时错误

我通过使用如下连接(为左外部连接编辑)解决了这个问题:

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

首先,让我们从中进行一个合理的查询。。。。。

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对象——可能是因为在那个混乱中放错了括号。。。