Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 返回C中子级的子级计数#_C# - Fatal编程技术网

C# 返回C中子级的子级计数#

C# 返回C中子级的子级计数#,c#,C#,我有一个Application对象,其中包含applicator对象。申请人对象的Employments对象包含有关雇用的所有信息(姓名、地址等)。这可以是0或2,3,4,。。。如何获得一次申请的Emp计数?所以在图片中的这个例子中,它必须返回4。但我的代码返回2,因为它返回的是每个申请者的计数,而不是申请 这是我的代码: public void InsertApplication(Application application) { if (application.

我有一个Application对象,其中包含applicator对象。申请人对象的Employments对象包含有关雇用的所有信息(姓名、地址等)。这可以是0或2,3,4,。。。如何获得一次申请的Emp计数?所以在图片中的这个例子中,它必须返回4。但我的代码返回2,因为它返回的是每个申请者的计数,而不是申请

这是我的代码:

 public void InsertApplication(Application application)
    {
        if (application.Applicants != null)
        {
            foreach (var item in application.Applicants)
            {
                if (item.Employments != null)
                {
                    application.NumberOfEmployments = item.Employments.Count();
                }
            }
        }
        creditApplicationsContext.Applications.Add(application);
    }
这是应用程序对象:

  public class Application
    {
      public int Id { get; set; }
      public virtual ICollection<Applicant.Applicant> Applicants { get; set;    }
      public int? NumberOfEmployments { get; set; }

好吧,你就快到了,问题是你要替换每个子节点的值,而不是添加它

更改为:

public void InsertApplication(Application application)
{
    application.NumberOfEmployments = 0;

    if (application.Applicants != null)
    {
        foreach (var item in application.Applicants)
        {
            if (item.Employments != null)
            {
                application.NumberOfEmployments += item.Employments.Count();
            }
        }
    }
    creditApplicationsContext.Applications.Add(application);
}

好吧,你就快到了,问题是你要替换每个子节点的值,而不是添加它

更改为:

public void InsertApplication(Application application)
{
    application.NumberOfEmployments = 0;

    if (application.Applicants != null)
    {
        foreach (var item in application.Applicants)
        {
            if (item.Employments != null)
            {
                application.NumberOfEmployments += item.Employments.Count();
            }
        }
    }
    creditApplicationsContext.Applications.Add(application);
}

如果我正确理解了您的结构,您应该能够使用相当简单的
SelectMany
Count

application.Applicants.SelectMany(a => a.Employments).Count();

如果我正确理解了您的结构,您应该能够使用相当简单的
SelectMany
Count

application.Applicants.SelectMany(a => a.Employments).Count();

SelectMany
可以帮助:

application.Applicants.SelectMany(x => x.Employments).Count();

SelectMany
可以帮助:

application.Applicants.SelectMany(x => x.Employments).Count();

您可以添加获取应用程序数量的方法,并使用
SelectMany

 public class Application
    {
        public int Id { get; set; }
        public virtual ICollection<Applicant> Applicants { get; set; }
        public int? NumberOfEmployments { get; set; }

        public int GetNumberOfApplications()
        {
            return this.Applicants.SelectMany(x => x.Employments).Count();
        }
    }
公共类应用程序
{
公共int Id{get;set;}
公共虚拟ICollection申请者{get;set;}
public int?NumberOfEmployments{get;set;}
public int GetNumberOfApplications()
{
返回此.applications.SelectMany(x=>x.Employments.Count();
}
}

您可以添加一个方法来获取应用程序的数量,并使用
SelectMany

 public class Application
    {
        public int Id { get; set; }
        public virtual ICollection<Applicant> Applicants { get; set; }
        public int? NumberOfEmployments { get; set; }

        public int GetNumberOfApplications()
        {
            return this.Applicants.SelectMany(x => x.Employments).Count();
        }
    }
公共类应用程序
{
公共int Id{get;set;}
公共虚拟ICollection申请者{get;set;}
public int?NumberOfEmployments{get;set;}
public int GetNumberOfApplications()
{
返回此.applications.SelectMany(x=>x.Employments.Count();
}
}

以获取就业人数的总数来考虑代码中的这种变化:

public void InsertApplication(Application application)
{
    if (application.Applicants != null)
    {
        foreach (var item in application.Applicants)
        {
            if (item.Employments != null)
            {
                application.NumberOfEmployments += item.Employments.Count();
            }
        }
    }
    creditApplicationsContext.Applications.Add(application);
}
通过这种方式,您可以获得就业总数。
我认为您的代码返回2是因为最后一个应用程序的使用人数。

< P>以获得总数的就业人数考虑代码中的这种变化:

public void InsertApplication(Application application)
{
    if (application.Applicants != null)
    {
        foreach (var item in application.Applicants)
        {
            if (item.Employments != null)
            {
                application.NumberOfEmployments += item.Employments.Count();
            }
        }
    }
    creditApplicationsContext.Applications.Add(application);
}
通过这种方式,您可以获得就业总数。
我认为您的代码返回2,因为这是上一个应用程序的雇员人数。

考虑更改此
application.NumberOfEmployments=item.employments.Count()
to
application.NumberOfEmployments+=item.Employments.Count()如果application.NumberOfEmployments从0开始,则没有人会从中添加或删除项目。在所有其他情况下,您可以考虑使其成为生命计数,每次您请求对象时,只需简单地迭代集合,或者使用VistabelCelp并通过IoFiTyCyPrimeCopyEdvices跟踪更改,请考虑更改“<代码>应用程序”。code>to
application.NumberOfEmployments+=item.Employments.Count()如果application.NumberOfEmployments从0开始,则没有人会从中添加或删除项目。在所有其他情况下,您可以考虑使其成为生命计数,每次您请求对象时,只需简单地迭代集合,或者使用VistabelCelp并通过IntIfyCopyC改事件跟踪更改。