简体   繁体   English

创建 Class Object 的集合

[英]Creating Collection of Class Object

I'm using Entity Framework and LINQ together in my project.我在我的项目中同时使用实体框架和 LINQ。 I'm trying to fetch some data with following syntax,我正在尝试使用以下语法获取一些数据,

I'm using following models, I have IList<TeamDetails>我正在使用以下模型,我有IList<TeamDetails>

public class OrganizationDetailsVM
{
    public Guid Branch { get; set; }
    public IList<TeamDetails> Teams { get; set; }
}

public class TeamDetails : Team
{
    public IList<TeamMember> TeamMembers { get; set; }
}

The problem is that I'm trying to use following query to fill my OrganizationDetailsVM but I can't actually reach my properties inside of my CounterDetails or TeamDetails class.问题是我正在尝试使用以下查询来填充我的OrganizationDetailsVM ,但实际上我无法访问CounterDetailsTeamDetails class 中的属性。

var teamQuery = _dbContext.PerfTeams
    .Select(x => new OrganizationDetailsVM
    {
        Branch = filter.BranchId,
        Teams = new List<TeamDetails>
        {
            //**I want my team details here as list of my TeamDetails class**
        }
    }).ToListAsync(cancellationToken);

As I mentioned in comments, here is related PerfTeamMembers classes.正如我在评论中提到的,这里是相关的 PerfTeamMembers 类。

public class TeamMember : BaseEntity
{
    [Required]
    [MaxLength(6)]
    public decimal StaffId { get; set; }

    public virtual Team Teams { get; set; }
}

Edit : PerfTeam class added, I've simplified my models for easily understanding.编辑:PerfTeam class 添加,我已经简化了我的模型以便于理解。

public class Team : BaseEntity
{
    [Required]
    [StringLength(200)]
    public string TeamName { get; set; }

    [Required]
    public Guid TeamTypeId { get; set; }

    [Required]
    [StringLength(4)]
    public string TeamBranchId { get; set; } 

    [StringLength(4000)]
    public string TeamDescription { get; set; }

    [Required]
    public Guid TeamPeriod { get; set; }

    public virtual ICollection<TeamMember> TeamMembers { get; set; }

    public virtual TeamType TeamTypes { get; set; }
}
var teamQuery = _dbContext.PerfTeams.Include(p=>p.CounterMember).Include(p=>p.TeamMember). .Select(x => new OrganizationDetailsVM
{
    Branch = filter.BranchId,
    Counters = new List<CounterMember>(p.CounterMembers);//or whatever you called it in ef
    {
        //**I want my counter details here as list of my CounterDetails class**
    },

According to your table structure, it seems that you want to get the Team and the related Team Members (since the TeamDetail just contains the TeamMember), in this scenario, you could try to use the following code:根据您的表结构,您似乎想要获取 Team 和相关的 Team Members(因为 TeamDetail 仅包含 TeamMember),在这种情况下,您可以尝试使用以下代码:

        var query = _dbContext.Teams
                    .Select(x => new OrganizationDetailsVM() { 
                        Branch = x.TeamTypeId, 
                        Teams = new List<TeamDetails>() { 
                            new TeamDetails() { 
                                TeamMembers = x.TeamMembers } 
                        } 
                    });

Besides, in the OrganizationDetailsVM class, you could also change the TeamDetail Property to TeamMember, then, when you query the Teams table, you could directly get the related TeamMembers.另外,在OrganizationDetailsVM class中,也可以将TeamDetail属性改为TeamMember,然后在查询Teams表时,可以直接得到相关的TeamMember。 Code like this:像这样的代码:

public class OrganizationDetailsVM
{
    public Guid Branch { get; set; }
    public List<TeamMember> TeamMembers { get; set; }
}

the query statement:查询语句:

        var query = _dbContext.Teams
            .Select(x => new OrganizationDetailsVM()
            {
                 Branch = x.TeamTypeId,
                 TeamMembers = x.TeamMembers.ToList()
            });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM