Je ne sais pas d'où vient la valeur Criteria.Period
dans votre exemple de requête.
Cependant, je pense que vous essayez de lire les embauches et les terminaisons pour tous les mois disponibles (et vous pouvez facilement le filtrer). Votre requête pourrait mal tourner si la première table (Résiliation) n'incluait aucun enregistrement pour un mois spécifié (disons en mai). Alors la clause select
ne serait pas appelée avec "May" comme paramètre et même si vous aviez quelques données dans la deuxième table (représentant Hires), alors vous ne pourriez pas le trouver.
Cela peut être élégamment résolu en utilisant le Concat method (voir les exemples MSDN). Vous pouvez sélectionner tous termniations et tous les employés (dans une structure de données d'un certain type) et puis regrouper toutes les données par mois:
var terms = from t in HRSystemDB.Terminations
select new { Month = t.TerminationDate.Month,
Year = term1.TerminationDate.Year,
IsHire = false };
var hires = from emp in HRSystemDB.Persons.OfType<Employee>()
select new { Month = emp.HireDate.Month,
Year = emp.HireDate.Year
IsHire = true };
// Now we can merge the two inputs into one
var summary = terms.Concat(hires);
// And group the data using month or year
var res = from s in summary
group s by new { s.Year, s.Month } into g
select new { Period = g.Key,
Hires = g.Count(info => info.IsHire),
Terminations = g.Count(info => !info.IsHire) }
Lorsque l'on regarde le code maintenant, je suis sûr qu'il ya une certaine façon plus courte écrire ceci. D'un autre côté, ce code devrait être très lisible, ce qui est un avantage. Notez également que cela n'a pas d'importance que nous divisons le code en quelques sous-requêtes. Merci à evalutation paresseux de LINQ à SQL, cela devrait être exécuté comme une seule requête.
Nous montrer votre schéma de base de données aiderait. – Blindy
Qu'est-ce que 'Criteria.Period' et' Criteria.Period.Value.Month'? –
Qu'est-ce qui vous fait douter que c'est juste? Est-ce qu'il compile? Avez-vous essayé de l'exécuter? Cela donne-t-il les résultats que vous attendez? –