Как LINQ.FOREACH для доступа к родителю - PullRequest
2 голосов
/ 14 января 2011

Посылки - это список

каждая посылка имеет свойство Owners, которое содержит список

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

Не уверен, как его переписать ...

Ответы [ 2 ]

3 голосов
/ 14 января 2011

создать анонимную пару для повторения.

 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
 }
0 голосов
/ 14 января 2011

Вам нужно будет добавить посылку к предмету, возвращенному 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;
            ...
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...