Как получить значение переменной списка при группировании по - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь сгруппировать по идентификатору проекта, чтобы я мог вернуть сумму, однако, когда я пытаюсь вернуть значение поля, используя First (), он возвращает только одно значение.

ASP.net c # projectпытаясь вернуть сумму для поля, у меня есть код, возвращающий правильное число с помощью LINQ, однако я не могу вернуть соответствующее строковое поле.Я пробовал группировать по 2 полям, но это возвращает слишком много записей.

public class JobsByDrivetime
{
private string pid;
private double jobMinutes;
private string jobEventType;
public JobsByDrivetime(string pid, double jobMinutes,string jobEventType)
{
    this.pid = pid;
    this.jobMinutes = jobMinutes;
    this.jobEventType = jobEventType;

}

public string Pid
{
    get { return pid; }
    set { pid = value; }
}

public double JobMinutes
{
    get { return jobMinutes; }
    set { jobMinutes = value; }
}

public string JobEventType
{
    get { return jobEventType; }
    set { jobEventType = value; }
}
}

List<JobsByDrivetime> ProjectbyDrivetime = new List<JobsByDrivetime>();

ProjectbyDrivetime.Add(new JobsByDrivetime("0186975-0001", 439, "HR"));
ProjectbyDrivetime.Add(new JobsByDrivetime("0186975-0001", 100, "HR"));
ProjectbyDrivetime.Add(new JobsByDrivetime("0186975-0001", 180, "JR"));

var projectBydrivetimeList = ProjectbyDrivetime
.GroupBy(v => v.Pid) //(c => new { Pid = c.Pid, ProjectType = c.JobEventType })
.Select(g => new
{
    Pid = g.Key,
    ProjectMinutes = g.Sum(x => x.JobMinutes),
    ProjectType=g.Select(x=> x.JobEventType).First()
}).ToList();
foreach (var D in projectBydrivetimeList)
{
    shiftSummary.Add("<tr><td>" + D.Pid + "</td><td>" + D.ProjectType + "</td><td>" + D.ProjectMinutes + "</td></tr>");
}

Вывод

0186975-0001 HR 539

0186975-0001 HR 180

Он правильно группирует ProjectMinutes (по типу проекта), но отображает только один из 2 типов проектов.Я ожидаю, что D.ProjectType будет HR на первом и JR на втором.Я понимаю, что это потому, что я использую First ().

1 Ответ

0 голосов
/ 01 февраля 2019

Надеюсь, я правильно понял ваше требование.Вы были в курсе ваших мыслей относительно группировки по Pid и ProjectType.

var projectBydrivetimeList = ProjectbyDrivetime
                             .GroupBy(v => new {v.Pid,v.JobEventType}) 
                             .Select(g => new
                             {
                               Pid = g.Key.Pid,
                               ProjectMinutes = g.Sum(x => x.JobMinutes),
                               ProjectType=g.Select(x=> x.JobEventType).First()
                              }).ToList();

Пример вывода

enter image description here

Обновление

На основании вашего комментария еще один пример ввода

enter image description here

Вывод

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...