2016-11-14 18 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を使用して子コレクションですか?

UPDATEToInterventionAndNeetRiskReportLineModel()拡張メソッド

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

私は完全にあなたが拡張メソッドに分離したい質問コードの一部はわかりません。また、拡張メソッド部分に焦点を当てないでください。他の関数とは何の違いもなく、記述に関する限りです。

あなたが本当にそれが必要な場合は代わりにIEnumerable<T>のリストとして最終的な結果のためにInterventionAndNeetRiskReportLineModelToListに変換するためにInterventionHistoryオブジェクトとSelectのフラットなリストを取得するためにSelectManyを使用することができます。だから、

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

関連する問題