2016-05-26 1 views
0

Je joins des tables de couple et essaye d'obtenir le compte de chaque statut.regrouper des données à partir de plusieurs tables en utilisant linq

EmployeeEvaluationsStatuses a les champs suivants:

Id, Titre.

données à EmployeeEvaluationsStatuses ressembler à:

Id Title 
1 New - Incomplete 
2 Submitted – All Docs 
3 Approved 
4 Rejected - Need More Info 
5 Qualified 

Je veux obtenir le résultat comme suit:

StatusCount Status 

60   New - Incomplete 
42   Submitted – All Docs 
20   Qualified 

Voici comment mon regard de requête comme:

from ep in EmployeePositions.Where(a => a.CorporateId == 1596) 
join ee in EmployeeEvaluations.Where(e => e.TargetGroupId != null) on ep.EmployeeId equals ee.EmployeeId 
join ees in EmployeeEvaluationStatuses on ee.EvaluationStatusId equals ees.Id 

group ees by ees.Id into g 
select new 
{ 
    StatusCount = g.Count() 
    ,Status= ees .title  
} 

Je suis erreur "The name 'ees' does not exist in the current context"

Je ne suis pas sûr des propriétés de navigation.

public partial class WotcEntities : DbContext 
    { 
     public WotcEntities() 
     : base(hr.common.Database.EntitiesConnectionString("res://*/ef.WotcModel.csdl|res://*/ef.WotcModel.ssdl|res://*/ef.WotcModel.msl", "devConnection")) 
     { 
     } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      throw new UnintentionalCodeFirstException(); 
     } 


     public virtual DbSet<EmployeeEvaluations> EmployeeEvaluations { get; set; } 
     public virtual DbSet<EmployeeEvaluationStatus> EmployeeEvaluationStatus { get; set; } 
     public virtual DbSet<EmployeePositions> EmployeePositions { get; set; } 

    } 




public partial class EmployeeEvaluationStatus 
    { 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
     public EmployeeEvaluationStatus() 
     { 
      this.EmployeeEvaluations = new HashSet<EmployeeEvaluations>(); 
      this.Vouchers = new HashSet<Vouchers>(); 
     } 

     public int Id { get; set; } 
     public string Title { get; set; } 

     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<EmployeeEvaluations> EmployeeEvaluations { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<Vouchers> Vouchers { get; set; } 
    } 
+0

Avez-vous des propriétés de navigation entre vos entités? Pouvez-vous montrer vos classes d'entité? –

+0

J'ai ajouté les classes d'entités qui se présentent sous entityFramework. – BumbleBee

+0

Vous semblez avoir des propriétés de navigation. Pouvez-vous montrer 'EmployeePositions' et' EmployeeEvaluations'? –

Répondre

1

Vous devez utiliser une clé composite dans votre group by et naviguer à l'aide g.Key

from ep in EmployeePositions.Where(a => a.CorporateId == 1596) 
join ee in EmployeeEvaluations.Where(e => e.TargetGroupId != null) on ep.EmployeeId equals ee.EmployeeId 
join ees in EmployeeEvaluationStatuses on ee.EvaluationStatusId equals ees.Id 

group ees by new { ees.Id, ees.title } into g 
select new 
{ 
    StatusCount = g.Count(), 
    Status= g.Key.title 
}