向匿名类型的枚举添加新项

本文关键字:枚举 添加 新项 类型 | 更新日期: 2023-09-27 18:02:02

我必须在匿名类型中添加新项。我已经尝试了很多解决方案,但都不起作用。下面是我的代码

代码:

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

向匿名类型的枚举添加新项

如果不使用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();

匿名类型是临时使用的。你想要的是一个类的列表。

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

那对你没有任何帮助。