2016-08-11 3 views
-7

Ich muss dem anonymen Typ neue Elemente hinzufügen. Ich habe viele Lösungen ausprobiert, aber es funktioniert nicht. Hier ist der meinen CodeFügen Sie der Aufzählung eines anonymen Typs neue Elemente hinzu.

Code:

  var literByBeerBrand = (from salesResult in clientSalesResult.Liste.OrderBy(a => a.SaleDay) 
         select new 
         { 
          date = salesResult.SaleDay.ToString("yyyy-MM-dd"), 
          value = salesResult.TotalCl/5642 
         }).ToList() 
         .GroupBy(k => k.date) 
         .Select(y => new {value = y.Sum(x=>x.value), date = y.First().date}); 

for (int i = 0; i <= diff.Days; i++) 
{ 
    if (!(literByBeerBrand 
     .Any(y => y.date == firstDate.ToString("yyyy-MM-dd")))) 
    { 
     var t = new 
     { 
      value = 0, 
      date = firstDate.ToString("yyyy-MM-dd") 

     }; 
     // HERE I MUST ADD NEW ITEM TO ANONYMOUS TYPE 
    } 

    firstDate = firstDate.AddDays(1); 
} 

ich versucht habe, bevor

1) literByBeerBrand.ToList()[literByBeerBrand.ToList().Count()] = t; 

2) literByBeerBrand.ToList().Add(new 
       { 
        value = 0, 
        date = firstDate.ToString("yyyy-MM-dd") 

       }); 
+1

Ihr "anonymer" Typ scheint tatsächlich ein 'KeyValuePair' zu sein. Kannst du bitte angeben, wo du 'literByBeerBrand' an erster Stelle deklarierst? – uTeisT

+0

Was ist 'literByBeerBrand'? – Backs

+1

Was funktioniert nicht? Erhalten Sie einen Kompilierungsfehler? Was ist der Elementtyp von 'literByBeerBrand'? Im Moment versuchen Sie, eine neue Liste zu erstellen und fügen Sie statt "literByBeerBrand" ein Element hinzu. – Lee

Antwort

0

Sie nicht eine Sammlung von Objekten des anonymen Typs ohne var mit erklären kann, so gibt es keine einfache Möglichkeit, Objekte von Grund auf neu hinzufügen.

Allerdings können Sie Ihren Code wie LINQ umschreiben, und verwenden Sie ToList()/ToArray() darauf:

var res = Enumerable 
    .Range(0, diff.Days+1) 
    .Where(addedDays => literByBeerBrand.All(y => y.date != firstDate.AddDays(addedDays).ToString("yyyy-MM-dd"))) 
    .Select(addedDays => new { 
     value = 0, 
     date = firstDate.AddDays(addedDays).ToString("yyyy-MM-dd") 
    }) 
    .ToList(); 
0

Anonyme Typen sind für den temporären Einsatz. Was Sie wollen, ist eine Liste einer Klasse.

public class BeerType 
{ 
    public int Value { get; set; } 
    public DateTime Date { get; set; } 
} 

List<BeerType> literByBeerBrand = new List<BeerType>(); 

Jetzt können Sie Artikel zu literByBeerBrand den ganzen Tag hinzu:

literByBeerBrand.Add(new BeerType { Value = 0, Date = firstDate.ToString("yyyy-MM-dd") }; 

Es ist natürlich für Sie über die Deklaration von literByBeerBrand äußerst geheimnisvoll zu sein; Wie können die Menschen Ihnen möglicherweise helfen, es besser zu nutzen, wenn sie wissen, was ihr tatsächlicher Typ ist? Das wäre verrückt reden. Aber da Sie es weiterhin in eine Liste konvertieren, werde ich vermuten, dass es sich um eine Art von IEnumerable<T> handelt, wobei T ein anonymer Typ ist.

Was diese Linie tut, ist es schafft ein neues temporäres List<T> Objekt, fügt ein Element, um es, und dann wirft das Objekt entfernt.

literByBeerBrand.ToList().Add(new 
      { 
       value = 0, 
       date = firstDate.ToString("yyyy-MM-dd") 

      }); 

Das bringt Sie nirgendwohin.

Verwandte Themen