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