0

私のLogクラスには2つのプロパティがあります。

List<LogDetails>
string Title

そして、私のLogDetailsクラスには2つのプロパティがあります。

string Message
LogStatus LogStatus  //enum

このオブジェクトの存続期間中、後の段階でログに記録するために保存される多くのメッセージを受信します。LogStatus列挙型にはいくつかの状態がありますが、単に「進行中」、「ファイルが見つかりませんエラー」、「成功」、または「失敗」のいずれかです。

失敗したものだけを一致させるためにLinqを使用しようとしていますが、新しいタイプをビルドできません。

List<Log> filteredLogs = (from a in logs
                          from b in a.LogDetailsList
                          where b.Status == LogDetails.LogStatus.Failed
                          select new Log()
                                  {
                                     Title = a.Title,
                                     LogDetailsList = a.LogDetailsList
                                  }).Distinct().ToList();

私のfilteredLogsは、where句が機能しなかったかのように完全なリストを返します。

私は試した

 List<Log> filteredLogs = (from a in logs
                           from b in a.LogDetailsList
                           where b.Status == LogDetails.LogStatus.Failed
                           select new Log()
                                  {
                                       Title = a.Title,
                                       LogDetailsList = new LogDetails() { Message = b.Message, Status = b.Status }
                                  }).Distinct().ToList();

Linqクエリ内からToList()メソッドを呼び出すことができないように見えるため、これも機能しません。

編集

この問題を克服する方法について誰か提案がありますか?私の目標は、失敗したものだけをリストするリストを作成することです。

4

1 に答える 1

2

Enumerable.Any「ネストされた」LogDetailsリストで使用します。

List<Log> failedLogs = logs
            .Where(l => l.LogDetails.Any(ld => ld.LogStatus==LogStatus.Failed))
            .ToList();

これにより、少なくとも1つのlog-detailが含まれるすべてのログが返されますLogStatus.Failed

これがデモです。

于 2013-01-22T13:36:40.740 に答える