Ich habe eine Methode, die eine Menge von LINQ verwendet, um einige Werte in einer Liste von Tuple<string, int>
festzulegen und abzugleichen.Linq Kombinieren Sie zwei Anweisungen in eine große Aussage (Optimierung)
Im Moment bin ich immer noch mit zwei foreach Schleifen ineinander verschachtelt und ich denke, es wäre möglich, sie in eine gigantische LINQ-Abfrage zu kombinieren. Ich frage mich, was wäre der beste Weg, dies mit Optimierung als eine große Bedingung zu tun.
Dies ist die Funktion ich spreche:
private async void AddLocalChangesFromPendingOperations()
{
var pendingOperations = await this.operationsStorage.GetOperationsAsync();
var list = pendingOperations.
SelectMany(pendingOperation =>
pendingOperation.Settings, (pendingOperation, setting) =>
new { pendingOperation, setting })
.Where(a => a.setting.Key == "selection")
.Select(a => new Tuple<string, int>(
a.pendingOperation.DefinitionId,
Convert.ToInt32(a.setting.Value.ValueObject)))
.ToList();
foreach (var pendingChange in list)
{
var selection = await this.selectionsStorage.GetSelectionByIdAsync(pendingChange.Item2);
foreach (var selectionsViewModel in this.SelectionsList.Where(a => a.Name == selection.Name))
{
if (pendingChange.Item1 == "selection-add-animals")
{
selectionsViewModel.IsActive = true;
}
else if (pendingChange.Item1 == "selection-remove-animals")
{
selectionsViewModel.IsActive = false;
}
}
}
}
Wenn möglich Ich mag würde die letzten beiden foreaches zu optimieren, während Linq verwenden. Ich habe etwas versucht, aber ich bin fest auf Werte in der aktuellen Liste Einstellung ...
ich dies tat:
this.SelectionsList = this
.SelectionsList
.Where(a => a.Name == selection.Name)
.SingleOrDefault(
a => pendingChange.Item1 == "selection-add-animals" ? a.IsActive = true : a.IsActive = false
);
Können Sie nicht einfach die Methode GetSelectionByIdAsync ändern, um eine Liste von IDs zu akzeptieren, so dass Sie die erste foreach loswerden? –