以下代码是我用来识别前十名收入项目的代码
var top = (from m in db.Stats
where m.Item.AccountID == AccountID
&& m.DateTime >= month
&& m.DateTime < month.AddMonths(1)
group m by m.Item into g
orderby g.Sum(p => p.Earnings) descending
select g.Key).Take(10).ToArray();
在比较2个不同月份时,我需要确定哪个项目的改进率最高(%)。可用数据仅为每日总计。我可能需要过滤掉低于一定数量“访客”的项目,即
m.Visitors >= 20
在Linq-Sql中执行此操作的最佳方法是什么?
答案 0 :(得分:0)
如果将查询拆分为两个不同的组,即当前月份(或时间段)和上个月(或时间段),则应该更容易管理。为清楚起见,我使用私有类来保持我们感兴趣的结果。您可以使用现有的类来代替。或者,编译器甚至可能足够聪明地意识到属性是相同的,因此为两个查询生成相同的匿名类。无论如何......
private class C {
public object Key { get; set; }
public object Earnings { get; set; }
}
var thisMonth = (from m in db.Stats
where m.Item.AccountID == AccountID
&& m.DateTime.Month == month
group m by m.Item into g
select new C { g.Key, g.Earnings });
var lastMonth = (from m in db.Stats
where m.Item.AccountID == AccountID
&& m.DateTime.Month == month.AddMonths(-1)
group m by m.Item into g
select new C { g.Key, g.Earnings });
从这里开始,需要将结果组合起来计算两组之间的增益或损失百分比。一旦完成,你可以按最高收益排序,以获得你的前n。