2016-11-14 4 views
0

Я пытаюсь выполнить запуск метода расширения для каждого элемента в пределах List<>, который находится внутри другого List<>, чтобы возвращать коллекцию данного типа (возвращаемый методом расширения).Метод расширения для элемента в списке в другом списке

Первоначально я пытался (и не удалось), чтобы сделать это с помощью LINQ, но я следующее:

 var dataset = GetReportDataset(org); 

     var reportData = new List<InterventionAndNeetRiskReportLineModel>(); 

     foreach (var record in dataset) 
     { 
      foreach (var inter in record.InterventionHistory) 
      { 
       reportData.Add(inter.ToInterventionAndNeetRiskReportLineModel()); 
      } 
     } 
     return _reportWriter.ReportCsvStream(reportData); 

Так что мой вопрос, как я могу спроецировать результат моего метода расширения для каждого элемента в детская коллекция с использованием linq?

UPDATE метод ToInterventionAndNeetRiskReportLineModel() расширение

public static InterventionAndNeetRiskReportLineModel ToInterventionAndNeetRiskReportLineModel(this InterventionHistory intervention) 
    { 
     return new InterventionAndNeetRiskReportLineModel() 
     { 
      Beneficiary = intervention.Person.Beneficiary, 
      CourseTitle = intervention.CourseTitle, 
      CaseNotes = intervention.CaseNotes, 
      EndDate = intervention.EndDate?.ToString(), 
      StartDate = intervention.StartDate.ToString(), 
      ParticipantId = intervention.Person.ParticipantId, 
      FirstEit = intervention.Person.EitScores.GetFirstEitReading().ToString(), 
      LastEit = intervention.Person.EitScores.GetLastEitReading().ToString(), 
      FirstLpt = intervention.Person.LptScores.GetFirstLptReading().ToString(), 
      LastLpt = intervention.Person.LptScores.GetLastLptReading().ToString(), 
      Gender = intervention.Person.Equalitites.Gender, 
      HoursAttended = intervention.NoOfHours.ToString(), 
      LanguageOfDelivery = intervention.DeliveryLanguage, 
      Providername = intervention.ProviderName, 
      QanCode = intervention.QanCode, 
      SchoolCollegeName = intervention.ProviderName 
     }; 
    } 
+0

Непонятно, что такое метод расширения, и что означает «и не удалось». Пожалуйста, предоставьте [mcve]. –

+2

Вы просто пытаетесь найти все элементы списка, которые являются частью другого списка? Для этого вам не требуется расширение. – Brandon

+0

Добавлен метод расширения – JimmyB

ответ

4

Я не совсем уверен, какая часть кода вопроса вы хотите разделить на метод расширения. Кроме того, не стоит фокусироваться на части метода расширения, ее ничего не отличает от других функций, что касается написания.

Вы можете использовать SelectMany для того, чтобы получить плоский список InterventionHistory объектов и Select для того, чтобы преобразовать в InterventionAndNeetRiskReportLineModel и ToList для конечного результата в виде списка вместо IEnumerable<T>, если вам действительно нужно.

var reportData = GetReportDataset(org) 
    .SelectMany(r => r.InterventionHistory) 
    .Select(i => i.ToInterventionAndNeetRiskReportLineModel()) 
    .ToList(); 

Так, может быть, вы хотите метод расширения как

public static IEnumerable<InterventionAndNeetRiskReportLineModel> ToInterventionRiskReports(this IEnumerable<ReportDataset> _self) 
    return _self 
     .SelectMany(r => r.InterventionHistory) 
     .Select(i => i.ToInterventionAndNeetRiskReportLineModel()); 
} 

И использовать его как

var reportData = GetReportDataset(org).ToInterventionRiskReports().ToList(); 

... как я уже сказал, это не совсем ясно, какую часть вы хотите для рефакторинга в метод расширения.

+1

SelectMany было решением, которым я был. Благодаря!! Мой вопрос мог быть более ясным, но ценить ваши усилия. – JimmyB

Смежные вопросы