La méthode suivante est relativement simple. J'essaie de déterminer un taux d'éléments de ligne en faisant correspondre une autre propriété de l'élément de ligne avec une recherche d'un objet parent. Il y a quelques petites choses que je n'aime pas et je cherche des solutions élégantes pour rendre la méthode plus petite, plus efficace, ou les deux. Cela fonctionne dans son état actuel et ce n'est pas comme si c'était inefficace ou quoi que ce soit. Ce n'est pas critique de la mission ou quoi que ce soit, plus d'une curiosité.Nettoyage d'un foreach simple avec linq
private decimal CalculateLaborTotal()
{
decimal result = 0;
foreach (ExtraWorkOrderLaborItem laborItem in Labor)
{
var rates = (from x in Project.ContractRates where x.ProjectRole.Name == laborItem.ProjectRole.Name select x).ToList();
if (rates != null && rates.Count() > 0)
{
result += laborItem.Hours * rates[0].Rate;
}
}
return result;
}
J'aime l'idée d'utiliser List<T>.ForEach()
, mais j'avais du mal à garder un peu assez succinct pour être encore facile à lire/maintenir. Des pensées?
Nous pourrions probablement faire quelques suppositions, mais il serait beaucoup plus facile d'aider si nous avons compris les objets avec lesquels vous travailliez, et pourquoi vous référencez "rates [0] .Rate" pour chaque calcul. –
var rates = (à partir de x dans Project.ContractRates où x.ProjectRole.Name == laborItem.ProjectRole.Name sélectionnez x.Rate) .FirstOrDefault(); serait probablement mieux – Keltex
Ah, FirstOrDefault, c'est une chose que je cherchais (mais pas très longtemps). Je n'aimais vraiment pas devoir convertir cette requête en une liste, puis référencer le premier objet via l'index. – nkirkes