【发布时间】:2017-12-02 18:26:42
【问题描述】:
我已经编写了一个解决方案,它基本上添加了缺失的日期,并将我的收藏中该日期的销售属性设置为 0,这样它就缺失了:
int range = Convert.ToInt32(drange);
var groupedByDate = tr.Union(Enumerable.Range(1, Convert.ToInt32(range))
.Select(offset => new MyClassObject
{
Date = DateTime.Now.AddDays(-(range)).AddDays(offset),
Sales = 0
})).GroupBy(x => x.Date)
.Select(item => new MyClassObject
{
Sales = item.Sum(x => x.Sales),
Date = item.Key
})
.OrderBy(x => x.Date)
.ToList();
第一个将 DB 中的日期分组且丢失的解决方案如下所示:
var groupedByDate = tr
.GroupBy(x => x.TransactionDate.Date)
.Select(item => new MyClassObject
{
Sales = item.Sum(x => x.QuantityPurchased),
Date = item.Key.ToString("yyyy-MM-dd")
})
.OrderBy(x => x.Date)
.ToList();
我不太喜欢我在第一个解决方案中的做法,代码看起来很乱,老实说我相信它可以用更好的方式编写..
有人可以帮我解决这个问题吗?
附:上面我展示的第一个解决方案效果很好,但是我想写一些更好的东西,看起来更漂亮,而且看起来很乱(我写的第一个解决方案)......
【问题讨论】:
-
要获得完整的上下文,请解释 tr 和 drange 变量。
-
你能不能选择日期范围,然后加入选择(日期,总销售额)?
-
@Emanuele tr 是我数据库中的交易... drange 是从视图传递的变量,它基本上代表了我将显示交易的一组日期。 Drange 可以是 = 30,21,14 或 7
-
这属于 Code Review,而不是 SO。
标签: c# asp.net asp.net-mvc linq c#-4.0