开发者

How to LINQ.FOREACH to access parent

开发者 https://www.devze.com 2023-02-05 05:45 出处:网络
Parcels is a List each Parcel has Owners property w开发者_StackOverflow中文版hich contains List parcels.Where(p => !p.Owners.IsNullOrEmpty()).SelectMany(p => p.Owners)

Parcels is a List

each Parcel has Owners property w开发者_StackOverflow中文版hich contains List

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 */
                    }

Not sure how to rewrite it...


make an anonymous pair to iterate over.

 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
 }


You'll need to add the parcel to the item returned by 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;
            ...
        }
0

精彩评论

暂无评论...
验证码 换一张
取 消