2011-04-06 40 views
1
<@[for i in linq.TrueIncidents -> i.RecTime, i.Name ] @> |> query |> Array.ofSeq 

如何獲得不同名稱的計數?如何獲得與linq/linq2sql計數?

只是count(Name) where Name = somename...

我覺得首先我必須在此選擇的形式與所有名稱|> Seq.distinctBy(有趣X - > x.Name) 然後進行Seq.Count()不同的選擇,其中名稱將是名字之一,然後聯合所有的選擇...真的很奇怪的方式。

或者,我可以用INT REF計數器每個distincted名稱關閉以後將其用作對象...

據我所知,我的解釋是有些凌亂,所以問,如果你不能得到它。我想知道是否有任何方式使用Count(Name)where Name = OneOfNames裏面的封閉或linq2sql?

回答

3

我不能編譯,以驗證該工作的那一刻,但請嘗試以下操作:

<@ linq.TrueIncidents 
    |> Seq.groupBy (fun i -> i.Name) 
    |> Seq.map (fun (name, is') -> name, Seq.length is') @> 
|> query 
|> Map.ofSeq 

這應該給你的每個名稱及其各自的出現次數的Map<string, int>

+1

運算符Seq.groupBy不能用於查詢。改爲使用Microsoft.FSharp.Linq.Query.groupNy,它具有與標準F#運算符 – Cynede 2011-04-06 09:45:01

+0

不同的返回類型,但成員X.CountStatistics()= linq.TrueIncidents |> Seq.groupBy(fun v - > v.Name ) |> Seq.map(fun(k,vs) - > k,Seq.length vs) |> Array.ofSeq是解決方案,可悲的是沒有sql – Cynede 2011-04-06 10:28:32