J'ai récemment écrit une requête LINQ pour obtenir un Dictionary
contenant les montants de placement des 6 derniers mois.Comment rendre cette requête LINQ plus propre?
Il renvoie une chaîne Dictionary
de mois - paires de nombres décimaux.
Cela semble un peu compliqué. N'importe lequel d'entre vous maîtrisant LINQ peut-il m'aider à refactoriser cela pour le rendre un peu plus propre?
/// <summary>
/// Gets the last 6 months of Placement History totalled by Month
/// for all Agencies
/// </summary>
/// <returns></returns>
public Dictionary<string, decimal> getRecentPlacementHistory()
{
var placementHistoryByMonth = new Dictionary<string, decimal>();
using (DemoLinqDataContext db = new DemoLinqDataContext())
{
for (int i = 0; i < 6; i++)
{
Decimal monthTotal =
(from a in db.Accounts
where
(a.Date_Assigned.Value.Month == DateTime.Now.AddMonths(-i).Month &&
a.Date_Assigned.Value.Year == DateTime.Now.AddMonths(-i).Month)
select a.Amount_Assigned).Sum();
String currentMonth = DateTime.Now.AddMonths(-i).ToString("MMM");
placementHistoryByMonth.Add(currentMonth, monthTotal);
}
return placementHistoryByMonth;
}
}
selectedDate.Month.Year n'a pas beaucoup de sens ... faute de frappe? ;) – em70
@Jon Skeet, Comment puis-je gérer la situation où le mois est Janvier. Une fois que nous soustrayons des mois de la date actuelle, l'année ne correspondra plus et cette méthode échouera. J'essaie de comprendre comment contourner cela, tout en ne correspondant pas pour chaque Janvier. –
Oui, je me demandais à ce sujet. Il utilise selectedDate.Month.Year pour éviter d'obtenir des données de tous les mois similaires au cours des années, mais si la boucle de la plage de dates soustrait suffisamment de mois, l'année changera sur lui et cela ne fonctionnera pas. Comment voulez-vous contourner cela? – KingNestor