Wie zu verwenden async und await in LINQ?
Ich bin neu ASP.NET und wurde versucht, auf ein Beispiel-Projekt. Ich weiß das ist eine dumme qs aber bitte Geduld mit mir. Mein code unten ist wieder nur ein Ergebnis, auch wenn es mehrere Zeilen zurückgegeben, die in der SQL-Abfrage. Ich merke, dass FirstOrDefaultAsync gibt nur das erste element. Ich wurde durch die Dokumentation hier: https://msdn.microsoft.com/en-us/library/system.data.entity.queryableextensions(v=vs. 113).aspx aber ich konnte Sie nicht finden, was zu verwenden anstelle von FirstOrDefaultAsync zurückgeben würde nicht nur die erste Zeile, aber alles entspricht meinen SQL-Bedingung.
Dies ist mein code bisher:
[ResponseType(typeof(Region))]
public async Task<IHttpActionResult> GetRegion(int id)
{
var region_id = from sr in db.ServiceToRegions
where sr.Service_ID == id
select sr.Region_ID;
var region = await db.Regions.Select(r =>
new
{
Region_ID = r.Region_ID,
Region_Name = r.Region_Name
}).FirstOrDefaultAsync(r => region_id.Contains(r.Region_ID)); //QQQ
if (region == null)
{
return NotFound();
}
return Ok(region);
}
Was sollte ich verwenden, anstatt FirstOrDefaultAsync?
- Versuchen .Wählen Sie (...) msdn.microsoft.com/en-us/library/bb548891(v=vs. 100).aspx
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie verwenden ToListAsync() nach, Wo:
https://msdn.microsoft.com/en-us/library/dn220257(v=vs. 113).aspx
Hinweis "neue Region" zu lösen, dass Ihre anonymen Typ problem für die Serialisierung (ich kann nicht kommentieren Scott ' s Antwort).
UDPATE
Weil Sie versuchen, teilweise laden Sie ein Modell (nur 2 Eigenschaften), die Sie benötigen, um ein ViewModel wie diese:
Dann ändern Sie Ihren code für diese:
Vergessen Sie nicht, aktualisieren Sie Ihre Antwort geben!
Könnten Sie ersetzen die
FirstOrDefaultAsync
mit einer Kombination vonWhere
und einToListAsync()
Diese zurück
List<someAnnonamousType>
.new
dass die korrekten Beschriftungen zu machen, serializable angewendet.Region
den gleichenRegion
als verwendet wird, fürdb.Regions
? Wenn ich sagte, "richtige Klasse" I ment eine neue DTO-Klasse zuweisen, nicht die Wiederverwendung der vorhandenen Entität. Siehe Sproulx Antwort für ein komplettes Beispiel, von was ich Rede.In diesem Fall wollen Sie alle Datensätze, Sie sollten entfernen Sie den Aufruf
FirstOrDefaultAsync()
zurückgeben wird, die SieIEnumerable<anonymoustype>
wie unten. Sie können die Bedingung mitWhere()
LINQ-extension-Methode