0

该应用程序是一个基本的股票分析应用程序。

数据集如下所示:

`ABC, True, 21/09/2012, 101.34

ABC,错误,2012 年 9 月 21 日,202.45

CDE,真实,2012 年 9 月 21 日,345.67

美国广播公司,真实,2012 年 9 月 22 日。456.78

` SQL 在这里:

SELECT TickerCode, Australian from Stk_ClosingPrices group by TickerCode,
 Australian having count(*) >= @daysToAverageOver order by TickerCode 

结果,我想要的是按前两个字段进行分组,并计算每组中有多少。对于上述情况,这将是:

ABC,真,2 ABC,假,1 CDE,真,1

然后我想只返回传入的 Count > 参数。

该算法将计算 20 天移动平均线,因此在英语中查询是“给我具有 20 多条数据记录的股票的键”

这就是我已经走了多远,但我无法让伯爵正确,每个小组总是一样的。

  var query = (from cp in this.ObjectContext.stk_ClosingPrices group cp by new {
       cp.TickerCode, cp.Australian
   }
   into grp
    select new {
       grp.Key.TickerCode, grp.Key.Australian,
       Count = grp.Distinct()
   }).ToList();

我见过一个与grp.Sum(Quantity)类似的示例,但似乎无法将其重新转换为 .Count() 谓词。

非常感谢,

4

1 回答 1

0

尝试

var query1 = (from cp in this.ObjectContext.stk_ClosingPrices group cp by new {
   cp.TickerCode, cp.Australian
}
into grp
select new {
   grp.Key.TickerCode, grp.Key.Australian,
   Count = grp.Count()
});

var results = (from r in query where r.Count > 20 orderby r.TickerCode select r).ToList();

实际上会产生类似的 SQL

SELECT TickerCode, Australian, Count
FROM (
    SELECT COUNT(*) AS Count, TickerCode, Australian
    FROM  Stk_ClosingPrices
    GROUP BY TickerCode, Australian
    ) AS t1
WHERE t1.Count > 20
Order By t1.TickerCode
于 2012-09-21T08:38:13.457 回答