2

オブジェクトがあり、オブジェクトのプロパティの 1 つが名前のコンマ区切りリストです。

IList<Audits> auditData = new List<Audits>();
auditData.Add(new Audit
              {
                  Auditors = "Adam West, George Best",
                  TimeSpent = 7
              });

auditData.Add(new Audit
              {
                  Auditors = "Adam West",
                  TimeSpent = 5
              });

auditData.Add(new Audit
              {
                   Auditors = "Adam West, George Best, Elvis Presley",
                   TimeSpent = 3
              });

LINQ を使用してこのデータをクエリし、監査者のプロパティを分割し、監査者ごとにグループ化し、各監査者に費やした時間を合計して、各監査者に対して費やされた時間を含む監査者のリストを取得したいと思います。

アダム・ウェスト 15、
ジョージ・ベスト 10、
エルヴィス・プレスリー 3

誰でもそれを手伝ってもらえますか?ありがとう。

4

3 に答える 3

3

ラムダの使用:

var results =
    auditData
        // Flatten list - to list of individual auditors and time spent
        .SelectMany(
            audit => audit.Auditors.Split(',').Select(s => s.Trim()),
            (audit, auditorName) => new
            {
                Auditor = auditorName,
                TimeSpent = audit.TimeSpent,
            })
        // Group by auditor name
        .GroupBy(a => a.Auditor)
        // Sum time spent
        .Select(auditorGroup => new
        {
            Auditor = auditorGroup.Key,
            TotalTimeSpent = auditorGroup.Sum(a => a.TimeSpent)
        })
        .ToList();
于 2013-07-30T08:17:44.943 に答える
2

これはあなたが望むことをするはずです:

var query =
    from a in auditData
    let auditors = a.Auditors.Split(',').Select(s => s.Trim())
    from au in auditors
    group a.TimeSpent by au into g
    select new { Auditor = g.Key, TimeSpent = g.Sum() };
于 2013-07-30T08:10:34.497 に答える