组列表并对生成的匹配项执行功能

时间:2016-10-13 15:06:10

标签: c# linq linq-to-sql

我想通过分组查询从数据库中检索数据,然后计算它们的比率。以仓库中的仓位为例,您可以检索库存值2天,并且想知道变化率。

E.g:

ID Date InStock ItemID
1  15.01 5000    1
2  16.01 7000    1
3  15.01 9000    2
4  16.01 2000    2

我现在(查询内部或外部)如何计算匹配订单项的变化率? (比率被定义为(newOrder.Stock / oldOrder.Stock)-1)我知道如何通过简单的冗长方式来做到这一点,但我希望在linq中有一个更优雅的解决方案。

编辑:查询数据和所需结果的示例。

Layout

现在,项目1的增加率为40%,项目2的增幅为-78%。

我已经通过将组分成两个列表然后检查每个列表中的另一个列表中的相应项来实现此目的。通过这种方式,您可以轻松地计算比率,但是您可以创建一些新变量和嵌套的foreach循环,这似乎是不必要的。我只是在寻找更优雅的解决方案。

1 个答案:

答案 0 :(得分:0)

var query = from o in orders
                where (o.Date == firstDate || o.Date == secondDate)
                group o by o.ItemID into g
                select new
                {
                    ItemID = g.Key,
                    DateStart = g.ElementAt(0).Date,
                    DateEnd = g.ElementAt(1).Date,
                    Ratio = g.ElementAt(1).InStock / (float)g.ElementAt(0).InStock
                };

我们使用的事实是,我们知道每个分组只包含两个项目(每个日期一个),只需在新的匿名类型项目中选择分部的结果。

我的示例使用int作为InStock的类型,因此如果不需要,请随时删除(float)广告。