LINQ фильтрация и агрегация - PullRequest
2 голосов
/ 07 июня 2011

У меня есть список элементов, которые могут быть представлены следующим образом:

ClientNo     Name     Date        Time
0001         Mike     01/12/2000    6
0002         Dave     01/12/2000   12
0001         Mike     01/12/2000   10
0002         Dave     02/12/2000    6

Можно ли сгруппировать и объединить это, чтобы выглядеть примерно так, используя LINQ?

ClientNo     Name     Date        Time
0001         Mike     01/12/2000  16
0002         Dave     01/12/2000  12
0002         Dave     02/12/2000   6

Я пытаюсь вернуть статистическую строку для каждого клиента на определенную дату.Я возился со следующим, но не смог сделать это правильно.К сожалению, мои знания по LINQ довольно скудны.

var result = from p in ListofModel
             group p by new { p.ClientNo, p.Date, p.Name, p.Time } into g
             orderby g.key.Date
             select new ModelClass
             {
                 ClientNo = g.Key.ClientNo,
                 Name = g.key.Name,
                 .....
             }

Не удивительно, что это не дает мне желаемых результатов.Как это можно исправить?

Ответы [ 2 ]

0 голосов
/ 07 июня 2011

Попробуйте это:

var result = from p in ListofModel
             group p by new { p.ClientNo, p.Name, p.Date } into g
             orderby g.Key.Date
            select new ModelClass
            {
             ClientNo = g.Key.ClientNo,
             Name = g.Key.Name,               
             Date = g.Key.Date,
             Time = g.SUM(t => t.Time)                  
            }
0 голосов
/ 07 июня 2011

Я думаю, это должно выглядеть так:

from p in ListofModel
group p by new { p.ClientNo, p.Date, p.Name } into g
orderby g.key.Date
select new ModelClass
{
    ClientNo = g.Key.ClientNo,
    Name = g.key.Name,
    Date = g.Key.Date,
    Time = g.Sum(x => x.Time)
}

Вы не хотите группировать по времени, поэтому его не следует включать в ключ группы.

...