Linq: счетное значение нескольких столбцов - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть таблица, как показано ниже:

enter image description here

Теперь я хочу получить результат, подобный enter image description here

В одном запросе, как можно подготовить объект, как показано ниже?

public BurndownJiraIssue(
            DateTime date,
            int toDoCount,
            int inProgressCount)

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Вы можете GroupBy Date, чтобы получить требуемый результат

    var result = list.GroupBy(x => x.Date).Select(x => new BurndownJiraIssue
    {
        Date = x.Key,
        ToDoCount = x.ToList().Count(c => c.Status == "In Progress"),
        InProgressCount = x.ToList().Count(c => c.Status == "Done"),
    });
0 голосов
/ 08 апреля 2019

Вы можете попробовать с этой перегрузкой из .GroupBy:

class Program
{
    static void Main(string[] args)
    {
        List<StatusDTO> statuses = new List<StatusDTO>
        {
            new StatusDTO
            {
                Id = 1,
                Date = "8-Apr",
                Status = "In Progress"
            },
            new StatusDTO
            {
                Id = 2,
                Date = "8-Apr",
                Status = "In Progress"
            },
            new StatusDTO
            {
                Id = 3,
                Date = "8-Apr",
                Status = "In Progress"
            },
            new StatusDTO
            {
                Id = 4,
                Date = "8-Apr",
                Status = "Done"
            },
            new StatusDTO
            {
                Id = 5,
                Date = "9-Apr",
                Status = "In Progress"
            },
            new StatusDTO
            {
                Id = 6,
                Date = "9-Apr",
                Status = "Done"
            },
            new StatusDTO
            {
                Id = 7,
                Date = "9-Apr",
                Status = "Done"
            }
        };

        List<ResultStatusDTO> results = statuses.GroupBy(x => x.Date, x => x, (a, b) => new ResultStatusDTO
        {
            Date = a,
            DoneCount = b.Count(x => x.Status == "Done"),
            InProgressCount = b.Count(x => x.Status == "In Progress")
        }).ToList();

    }
}

public class ResultStatusDTO
{
    public string Date { get; set; }
    public int InProgressCount { get; set; }
    public int DoneCount { get; set; }
}

public class StatusDTO
{
    public int Id { get; set; }
    public string Date { get; set; }
    public string Status { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...