2
votes

Ajouter une plage à une nouvelle liste d'objets dans la même commande / ligne

J'essaye d'ajouter une plage d'une liste d'objets à une nouvelle liste, mais je reçois le message suivant:

Impossible de convertir implicitement le type "void" en "System.Collections.Generic.List"

Voici ce que j'essaye:

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; }
}

Que dois-je faire?


DetalhesExcel Class:

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())


5 commentaires

veuillez mettre votre classe Excel Detalhes sur le code


La structure de classe @ JoãoPauloAmorim DetalhesExcel n'a rien à voir avec cela.


@Sumitraj j'essayais juste de le recréer ici, désolé


@ joão-paulo-amorim Ok, je l'ai mis à jour avec la classe.


.AddRange doit être appelé séparément car il renvoie void . Essayez plutôt Concat


5 Réponses :


1
votes

AddRange renvoie void. Par conséquent, séparez l'initialisation de la liste et AddRange en deux.

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())


1 commentaires

Il n'y a aucun moyen de les «fusionner»? "Detalhes" est une propriété d'un autre objet et je ne veux pas le séparer.



0
votes

AddRange () renvoie void et que «la dernière méthode que vous appliquez sur votre liste . Vous ne pouvez pas l'attribuer à une 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 commentaires

2
votes

Je pense que vous voulez quelque chose comme ceci

    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; }
}


1 commentaires

@Taian gentil, je suis heureux d'aider



1
votes

Depuis le AddRange renvoie la séquence existante et modifie la séquence existante void , il ne peut pas être utilisé dans une chaîne de méthodes dans le cadre d'une affectation. Cependant, vous pouvez utiliser le Concat méthode, qui crée la méthode une nouvelle séquence en concaténant la première avec la seconde, puis retourne cette nouvelle séquence:

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 commentaires

0
votes

En vous basant sur le commentaire que vous avez fait sur la réponse de Simonare, avez-vous essayé de faire

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"
    }
    };

essentiellement en utilisant la liste sélectionnée dans le constructeur basé sur la liste


0 commentaires