2017-07-11 5 views
1

Immer wenn ich ein neues Objekt aus dem Front-End hinzufüge, ist die ID = 0. In der WebApi-Ebene, ich versuche, die maximale ID, die in der Liste der Objekte existiert und dann zuweisen die nächste ID zu den neuen Objekten. Der folgende Code erhöht die ID nicht korrektInkrementieren einer ID mit LINQ

List<Event> events = eventVal.Where(e => e != null).ToList(); 
int eventMaxID = events.Max(e => e.id); 

events.Where(e => e.id == 0) 
    .Select((e, ixc) => new { id = eventMaxID + 1, Iter = eventMaxID + 1 }) 
    .ToList(); 

Ich bin nicht sicher, wie der zweite Parameter für die Select-Methode verwendet wird.

Jede Hilfe wäre willkommen! Vielen Dank.

+0

Ist Ihr Beispielcode korrekt? Ihr Aufruf an 'events.Select (e => e.id == 0)' sieht so aus als ob Sie 'events.Where (e => e.id == 0)' –

+0

Ja, Sie haben Recht. – rds80

Antwort

2

In der zweiten Form von Select, die Sie verwenden, ist ixc der Index des Elements in der Auflistung. Sie müssen das sowie die vorherige maximale ID hinzufügen. Auf diese Weise sollten Sie sich auch keine Gedanken darüber machen müssen, ob Sie Iter zuweisen (es scheint, dass Sie es nur als eine Art Zähler verwenden), also habe ich es entfernt.

var autoIncrementedEvents = events.Where(e => e.id == 0) 
    .Select((e, ixc) => 
    { 
    e.id = eventMaxId + 1 + ixc; 
    return e; 
    }) 
    .ToList(); 

Beachten Sie, dass die Art, wie Ihr Code geschrieben wird, das Ergebnis dieser Linq-Anweisung verworfen wird. Sie sollten es etwas zuweisen, wie ich es oben getan habe.

Ich werde nicht die Gültigkeit dieser als ein Gesamtansatz in einer Web-Einstellung (Race-Bedingungen, doppelte IDs, etc.) kommentieren. Im Idealfall sollte Ihr Datenspeicher die ID zuweisen.

+0

Können Sie näher auf "nicht funktioniert". Es ist schwer zu sagen, was genau du erreichen willst. –

+0

Das hat nicht funktioniert. Ich versuche, die ID-Spalte im Ereignis auf die nächste inkrementierte ID zu aktualisieren. 'Liste newEvent = events.Where (e => e.id == 0) .Wählen Sie ((e, ixc) => neu {id = ixc + eventMaxID + 1 + e.id}) .ToList() ; 'Gibt den Fehler" Kann den Typ 'System.Collections.Generic.List' nicht implizit konvertieren. in 'System.Collections.Generic.List rds80

+0

@ rds80 Linq dient zum Auswählen Sie haben nun das 'Event' in einen anonymen Typ umgewandelt. –

Verwandte Themen