1

以下のようなリストがあります

Name Score Date
S1   2     15/02/2013
S1   4     15/02/2013
S2   0     15/02/2013
My desired out should be
S1   6     15/02/2013

このために、LINQコードを次のように書きました

(from _data in _rawData
    group _data by new { _data.Date, _data.Name } into gp orderby gp.Key.Date             
             select new
             {                 
                 score = gp.Sum(_score => _score.Score),
                 store = gp.Max(_store => _store.Name),
                 Date = gp.Max(_Date => _Date.Date)
             }).OrderByDescending(_score => _score.score)
           .ToList().
           ForEach(item => _timeLiner.Add(new TimeLiner()
           {
               id = _id++.ToString(),
               start = item.auditDate.ToString(),
               title = "TopStore: " + item.store
           }

.Take(1).ToList()Single()SingleOrDefault()で試しましたが、First()目的の出力が得られませんでした。代わりに私は

S1    6     15/02/2013
S2    0     15/02/2013  
4

2 に答える 2

1

topは、その日のトップ スコア名の概要データを保持する新しい範囲変数です。

from d in _rawData
group d by d.Date into dateGroup
let top = dateGroup.GroupBy(x => x.Name)
                   .Select(g => new { Name = g.Key, Score = g.Sum(x => x.Score)})
                   .OrderByDescending(x => x.Score)
                   .First()
select new
{                 
     Name = top.Name,
     Score = top.Score,
     Date = dateGroup.Key
}
于 2013-02-06T12:25:25.920 に答える
0

次のようにすると、目的の出力が得られます。

(from _data in _rawData
 group _data by new { _data.Date, _data.Name } into gp orderby gp.Key.Date
 select new
 {                 
     score = gp.Sum(_score => _score.Score),
     store = gp.Max(_store => _store.Name),
     Date = gp.Max(_Date => _Date.Date)
 }).OrderByDescending(_score => _score.score)
   .First();

または、もう少し読みやすく:

_rawData.GroupBy(x => new { x.Date, x.Name })
        .Select(g => new {
                             Score = g.Sum(x => x.Score),
                             Store = g.Key.Name,
                             Date = g.Key.Date
                         }
        .OrderByDescending(x => x.Score)
        .First()
于 2013-02-06T12:15:06.950 に答える