2 Stimmen

Wie man mit LINQ.FOREACH auf das übergeordnete Element zugreift

Pakete ist eine Liste

jede Parzelle hat die Eigenschaft "Eigentümer", die die Liste

parcels.Where(p => !p.Owners.IsNullOrEmpty()).SelectMany(p => p.Owners)
                    .OrderByDescending(x => x.RecordingDate ?? x.SaleDate ?? x.DateEntered)
                    .ForEach(owner =>
                    { 
                    /* HERE I need to access to p which was a parent of this Owner */
                    }

Ich weiß nicht, wie ich es umschreiben soll...

3voto

Jimmy Punkte 85199

Ein anonymes Paar bilden, über das iteriert wird.

 foreach(var pair in parcels
    .Where(p => p.Owners != null)
    .SelectMany(p => new { o = p.Owners, p })
    .OrderByDescending(x => x.o.RecordingDate ?? x.o.SaleDate ?? x.o.DateEntered)) {

    var owner = pair.o;
    var parcel = pair.p;

    // do stuff
 }
 // alternate syntax
 foreach(var pair in from p in parcels
                     where p.Owners != null
                     from o in p.Owners
                     orderby o.RecordingDate ?? o.SaleDate ?? o.DateEntered descending
                     select new { o, p }) {
     var owner  = pair.o;
     var parcel = pair.p;
     // do stuff
 }

0voto

Lee Punkte 137913

Sie müssen das Paket der Sendung hinzufügen, die von SelectMany :

parcels
        .Where(p => !p.Owners.IsNullOrEmpty())
        .SelectMany(p => p.Owners.Select(o => new { Parcel = p, Owner = o }))
        .OrderByDescending(x => x.Owner.RecordingDate ?? x.Owner.SaleDate ?? x.Owner.DateEntered)
        .ForEach(item =>
        {
            Parcel p = item.Parcel;
            Owner o = item.Owner;
            ...
        }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X