2016-08-11 74 views
-7

我必須將新項目添加到匿名類型。我嘗試了很多解決方案,但不起作用。 這裏是我的代碼添加新項目以枚舉匿名類型

代碼:

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

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

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

       }); 
+1

您的「匿名」類型似乎實際上是一個「KeyValuePair」。你能在第一位發佈你在哪裏聲明'literByBeerBrand'嗎? – uTeisT

+0

'literByBeerBrand'是什麼? – Backs

+1

什麼不行?你有編譯錯誤嗎? 'literByBeerBrand'的元素類型是什麼?目前你正在嘗試創建一個新列表並添加一個項目,而不是'literByBeerBrand'。 – Lee

回答

0

你不能沒有使用var聲明匿名類型的對象的集合,我都試過了,所以沒有簡單的方法從頭開始添加項目。

但是你可以重寫你的代碼,LINQ,並在其上使用ToList()/ToArray()

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

匿名類型以供臨時使用。你想要的是一個類的列表。

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

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

現在,您可以將項目添加到literByBeerBrand整天:

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

這是自然的,你這就是爲literByBeerBrand聲明極其隱祕;如果人們知道它的實際類型是什麼,那麼人們怎樣才能更好地幫助你使用它?這將是瘋狂的談話。但是,由於您不斷將其轉換爲列表,因此我會猜測這是某種IEnumerable<T>,其中T是匿名類型。

什麼這行呢,是它創造一個新的臨時List<T>對象,增加了一個項目,然後拋出對象遠

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

      }); 

這不會讓你在任何地方。