Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 组列表,并对结果匹配项执行功能_C#_Linq_Linq To Sql - Fatal编程技术网

C# 组列表,并对结果匹配项执行功能

C# 组列表,并对结果匹配项执行功能,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我想通过分组查询从数据库中检索数据,然后计算它们的比率。以仓库中的位置为例,您在其中检索2天的库存值,并希望了解变化率 例如: 我现在如何(在查询内部或外部)计算匹配订单项目的更改率?(比率被定义为(newOrder.Stock/oldOrder.Stock)-1)我知道如何用一种简单而冗长的方法来实现,但我希望在linq中有一个更优雅的解决方案 编辑:查询数据和所需结果的示例 ID Date InStock ItemID 1 15.01 5000 1 2 16.01 7000

我想通过分组查询从数据库中检索数据,然后计算它们的比率。以仓库中的位置为例,您在其中检索2天的库存值,并希望了解变化率

例如:

我现在如何(在查询内部或外部)计算匹配订单项目的更改率?(比率被定义为(newOrder.Stock/oldOrder.Stock)-1)我知道如何用一种简单而冗长的方法来实现,但我希望在linq中有一个更优雅的解决方案

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

ID Date InStock ItemID
1  15.01 5000    1
2  16.01 7000    1
3  15.01 9000    2
4  16.01 2000    2
这将显示项目1增加40%,项目2减少-78%

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

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)
强制转换。

如果提供表的外观和预期结果的示例数据,将更容易理解。以及你为实现这一目标而采取的任何想法/方法
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
                };