2012-09-21 85 views
0

該應用程序是一款基本的股票分析應用程序。難以在LINQ中編寫此代碼

的數據集是這樣的:

'ABC,誠然,21/09/2012,101.34

ABC,假,21/09/2012,202.45

CDE,真,21/09/2012,345.67

ABC,True,22/09/2012。 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

然後,我想只有那些具有計數>參數傳入返回

該算法將計算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(數量)類似的例子,可就是不能夠再投,要.Count中()謂詞。

非常感謝,

回答

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 
+0

謝謝。輝煌! –