向匿名类型的枚举添加新项
本文关键字:枚举 添加 新项 类型 | 更新日期: 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")
});
那对你没有任何帮助。