109*_*793 0 c# linq lambda list
我有一份销售清单.
我还有一个财务里程碑的小数列表,例如100美元,250美元,500美元等.
我试图找到产品达到这些里程碑的时间点.我在下面尝试做的是将已经检索到的productSales列表放入我可以使用的结构中(实际查询执行货币转换等等.我只是想让这个问题变得简单),所以对于每个里程碑,我将它转换为此BusinessPlanningElement列表并按DateSold分组.
然后我按DateSold对它进行排序,我的想法是检索第一个等于或大于十进制里程碑变量的元素.然后我继续获取日期,并找到DateSold与产品提交给系统的日期之间的差异.
foreach (decimal milestone in milestones)
{
List<BusinessPlanningElement> MileStoneSales = (from sale in productSales
group sale by sale.DateSold into ds
select new BusinessPlanningElements
{
DateSold = ds.Key,
TotalSales = ds.Sum(it => it.TotalProductCut.HasValue ? it.TotalProductCut.Value : 0),
}).OrderBy(s => s.DateSold).ToList();
BusinessPlanningElement bpe = MileStoneSales.Where(mss => mss.TotalSales >= milestone)
.FirstOrDefault();
if (bpe != null)
{
DateTime DateReached = bpe.DateSold;
TimeSpan ts = DateReached - product.DateTimeSubmitted.Value;
int NumberOfDays = ts.Days;
//Output NumberOfDays
}
else
{
//Do Something Else
}
}
Run Code Online (Sandbox Code Playgroud)
如果我通过调试,我可以看到列表,并查看列表中应该从此查询中检索的项:
BusinessPlanningElement bpe = MileStoneSales.Where(mss => mss.TotalSales >= milestone)
.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
它似乎忽略了它,并向我返回一个空值.
有没有人有任何想法如何构建我的查询来检索列表中的第一个元素,其中TotalSales等于或大于小数里程碑?
尝试使用.SkipWhile().
List<BusinessPlanningElement> MileStoneSales = (from sale in productSales
group sale by sale.DateSold into ds
select new BusinessPlanningElements
{
DateSold = ds.Key,
TotalSales = ds.Sum(it => it.TotalProductCut.HasValue ? it.TotalProductCut.Value : 0),
}).OrderBy(s => s.DateSold).ToList();
decimal accumulatedSales = 0;
BusinessPlanningElement bpe = MileStoneSales
.SkipWhile(mss => {
accumulatedSales += mss.TotalSales;
return accumulatedSales < milestone;
})
.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)