Ich habe vor kurzem eine LINQ-Abfrage geschrieben, um eine Dictionary
zu erhalten, die die letzten 6 Monate Platzierungsbeträge enthält.Wie kann ich diese LINQ-Abfrage sauberer machen?
Es wird ein Dictionary
von Monat Zeichenfolge - Dezimalbetrag Paare zurückgegeben.
Es scheint eine Art von cluddyy. Irgendwelche von euch LINQ-Meistern da draußen, die mir helfen können, das umzuformulieren, um ein bisschen sauberer zu machen?
/// <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 macht nicht viel Sinn ... Tippfehler? ;) – em70
@ Jon Skeet, Wie kann ich mit der Situation umgehen, wo der Monat Januar ist. Sobald wir Monate vom aktuellen Datum subtrahieren, wird das Jahr nicht mehr übereinstimmen und diese Methode wird fehlschlagen. Ich versuche herauszufinden, wie ich das schaffen kann, aber immer noch nicht für JEDEN Januar. –
Ja, darüber habe ich mich gewundert. Er verwendet "selectedDate.Month.Year", um zu verhindern, dass Daten aus allen ähnlichen Monaten über die Jahre hinweg erfasst werden. Wenn die Datumsbereichsschleife jedoch genügend Monate subtrahiert, wird sich das Jahr ändern und es wird nicht funktionieren. Wie würdest du das schaffen? – KingNestor