Ich versuche, eine Lambda Select mit Entity Framework aus einer Tabelle in ein neues Modell durchzuführen, aber ich muss eine asynchrone Methode aufrufen können, um eine Eigenschaft für jede Instanz in der Rückkehr zu füllen eingestellt:Wie erwartet während Select in einem Lambda
await Task.WhenAll(_context.UserContacts.Where(uc => uc.UserId == user.Id).Select(async uc => new MailContact
{
Email = uc.Contact.Email,
UserId = uc.Contact.UserId,
ContactId = uc.Contact.Id,
Name = uc.Contact.UserId != null ? await _graphService.GetUserByIdAsync(uc.Contact.UserId) : null;
}
ich verstehe, dass Linq begrenzte Unterstützung für await/Async und ich habe sah einige andere Beispiele, wo die auf Stackoverflow asynchronen Teil in eine separate Schleife bewegt hat, zum Beispiel:
How to await a method in a Linq query
T[] data = await Task.WhenAll(contacts.Select(c => LoadDataAsync(c)));
Diese Methode lässt mich jedoch nicht das Objekt aktualisieren, das als "c" bezeichnet wird, es sei denn, ich überlasse den Verweis, was bei asynchronen Methoden nicht zulässig ist.
Kann jemand den effizientesten Weg erklären, die Namenseigenschaft richtig zu füllen?
Ich glaube, Sie 'Rückkehr erwarten Task.WhenAll (lookupTasks) verwenden gemeint haben kann; 'Not' Rückkehr warten Task.WhenAll (Aufgaben); ' –
@MetroSmurf: Fest, danke! –
Richtig, verstanden. Es fiel mir nicht ein, alle Eigenschaften in eine neue dynamische Eigenschaft neu zu wählen :) – RNDThoughts