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 Réponses :
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())
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.
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())
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; } }
@Taian gentil, je suis heureux d'aider
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());
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
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 renvoievoid
. Essayez plutôtConcat