我必须将新项目添加到匿名类型。我尝试了很多解决方案,但它不起作用。 这是我的代码
代码:
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")
});
答案 0 :(得分: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();
答案 1 :(得分: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")
});
这不会让你到任何地方。