Добавить диапазон в новый список объектов в той же команде / строке - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь добавить диапазон списка объектов в новый список, но получаю следующее сообщение:

Невозможно неявно преобразовать тип "void" в "System".Collections.Generic.List "

Вот что я пытаюсь:

Detalhes = new List<DetalhesExcel>() {
    new DetalhesExcel()
    {
        NumColunaInicial = 23,
        Coluna1 = "Representante",
        Coluna2 = "ValorRepasse",
        Coluna3 = "KmRepasse"
    }
}.AddRange(ocorrencias.Where(x => x.Conclusao != "PRÓPRIO")
    .GroupBy(x => x.Representante)
    .Select(x => new DetalhesExcel
    {
        NumColunaInicial = 23,
        Coluna1 = x.First().Representante,
        Coluna2 = x.Sum(y => y.ValorRepasse).ToString(),
        Coluna3 = x.Sum(y => y.KmRepasse).ToString()
    }).ToList())

Что мне нужно сделать?


Класс DetalhesExcel:

public class DetalhesExcel
{
    public int NumColunaInicial { get; set; }
    public string Coluna1 { get; set; }
    public string Coluna2 { get; set; }
    public string Coluna3 { get; set; }
    public string Coluna4 { get; set; }
    public string Coluna5 { get; set; }
}

Ответы [ 5 ]

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

Исходя из комментария к ответу Симонаре, который вы сделали, пытались ли вы

Detalhes = new List<DetalhesExcel>(ocorrencias.Where(x => x.Conclusao != "PRÓPRIO")
    .GroupBy(x => x.Representante)
    .Select(x => new DetalhesExcel
    {
        NumColunaInicial = 23,
        Coluna1 = x.First().Representante,
        Coluna2 = x.Sum(y => y.ValorRepasse).ToString(),
        Coluna3 = x.Sum(y => y.KmRepasse).ToString()
    }).ToList())
    {
    new DetalhesExcel()
    {
        NumColunaInicial = 23,
        Coluna1 = "Representante",
        Coluna2 = "ValorRepasse",
        Coluna3 = "KmRepasse"
    }
    };

по существу использовать выбранный список в конструкторе на основе списка

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

Поскольку AddRange изменяет существующую последовательность и возвращает void, она не может использоваться в цепочке методов как часть присвоения.Однако вы можете использовать метод Concat, который создает новую последовательность путем объединения первой со второй, а затем возвращает эту новую последовательность:

Detalhes = new List<DetalhesExcel>()
{
    new DetalhesExcel()
    {
        NumColunaInicial = 23,
        Coluna1 = "Representante",
        Coluna2 = "ValorRepasse",
        Coluna3 = "KmRepasse"
    }
}.Concat(ocorrencias.Where(x => x.Conclusao != "PRÓPRIO")
    .GroupBy(x => x.Representante)
    .Select(x => new DetalhesExcel
    {
        NumColunaInicial = 23,
        Coluna1 = x.First().Representante,
        Coluna2 = x.Sum(y => y.ValorRepasse).ToString(),
        Coluna3 = x.Sum(y => y.KmRepasse).ToString()
    }).ToList());
0 голосов
/ 21 февраля 2019

AddRange() возвращает void, и это последний метод, который вы применяете к своему list.Вы не можете присвоить это list.

Detalhes = new List<DetalhesExcel>() {
    new DetalhesExcel()
    {
        NumColunaInicial = 23,
        Coluna1 = "Representante",
        Coluna2 = "ValorRepasse",
        Coluna3 = "KmRepasse"
    }
};
Detalhes.AddRange(ocorrencias.Where(x => x.Conclusao != "PRÓPRIO")
        .GroupBy(x => x.Representante)
        .Select(x => new DetalhesExcel
        {
            NumColunaInicial = 23,
            Coluna1 = x.First().Representante,
            Coluna2 = x.Sum(y => y.ValorRepasse).ToString(),
            Coluna3 = x.Sum(y => y.KmRepasse).ToString()
        }).ToList())
0 голосов
/ 21 февраля 2019

Я думаю, что вы хотите что-то вроде этого

    class Program
{
    static void Main(string[] args)
    {
        List<Ocorrencia> ocorrencias = new List<Ocorrencia>() {
            new Ocorrencia() {
                Conclusao = "teste",
                KmRepasse = 1,
                Representante = "um",
                ValorRepasse = 2
            }
        };



        var Detalhes = new List<DetalhesExcel>() {
                new DetalhesExcel()
                {
                    NumColunaInicial = 23,
                    Coluna1 = "Representante",
                    Coluna2 = "ValorRepasse",
                    Coluna3 = "KmRepasse"
                }
            }.Concat(ocorrencias.Where(x => x.Conclusao != "PRÓPRIO")
                            .GroupBy(x => x.Representante)
                            .Select(x => new DetalhesExcel
                            {
                                NumColunaInicial = 23,
                                Coluna1 = x.First().Representante,
                                Coluna2 = x.Sum(y => y.ValorRepasse).ToString(),
                                Coluna3 = x.Sum(y => y.KmRepasse).ToString()
                            }).ToList());

    }
}

public class Ocorrencia
{
    public string Conclusao { get; set; }
    public string Representante { get; set; }
    public int KmRepasse { get; set; }
    public int ValorRepasse { get; set; }
}

public class DetalhesExcel
{
    public int NumColunaInicial { get; set; }
    public string Coluna1 { get; set; }
    public string Coluna2 { get; set; }
    public string Coluna3 { get; set; }
    public string Coluna4 { get; set; }
    public string Coluna5 { get; set; }
}
0 голосов
/ 21 февраля 2019

AddRange возвращает недействительным.Таким образом разделяется инициализация списка и AddRange на две части.

Detalhes = new List<DetalhesExcel>() {
    new DetalhesExcel()
    {
        NumColunaInicial = 23,
        Coluna1 = "Representante",
        Coluna2 = "ValorRepasse",
        Coluna3 = "KmRepasse"
    }
};

Detalhes.AddRange(ocorrencias.Where(x => x.Conclusao != "PRÓPRIO")
    .GroupBy(x => x.Representante)
    .Select(x => new DetalhesExcel
    {
        NumColunaInicial = 23,
        Coluna1 = x.First().Representante,
        Coluna2 = x.Sum(y => y.ValorRepasse).ToString(),
        Coluna3 = x.Sum(y => y.KmRepasse).ToString()
    }).ToList())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...