2012-11-20 25 views
0

返回一個字典我有一個表在我的SQL Anywhere數據庫12.0.1:從gouped查詢

CREATE TABLE Entries (
    ListId  UNIQUEIDENTIFIER NOT NULL, 
    . . . 
); 

我需要查詢表獲得的表具有相同ListID行數。在SQL:

SELECT ListID, COUNT(*) 
FROM Entries 
GROUP BY ListId; 

我想執行使用實體框架4.x的這個查詢,我要返回的結果爲Dictionary<Guid, long>。事情是這樣的:

public Dictionary<Guid, long> GetRowCounts(MyEntities context) { 
    Dictionary<Guid, long> result = null; 
    try { 
     result = (from entry in Entries 
        group entry by entry.ListId into listGroup 
        select listGroup).ToDictionary(grp => grp.Key, ????); 

    } catch (Exception ex) { 
     . . . 
    } 
    return result; 
} 

記住,我想有每個獨特ListId返回的行數。我用什麼來代替「????」?

回答

3

好吧,看你寫的東西:

記住,我想行

(重點煤礦)的計數。因此,你需要:

ToDictionary(grp => grp.Key, grp => grp.Count()) 

個人而言,我會寫這樣的方法雖然:

public Dictionary<Guid, int> GetRowCounts(MyEntities context) { 
    return context.Entries 
        .GroupBy(entry => entry.ListId) 
        .ToDictionary(g => g.Key, g => g.Count()); 
} 

...或者,如果你還希望它是一個Dictionary<Guid, long>,使用g => g.LongCount(),或者只投:

.ToDictionary(g => g.Key, g => (long) g.Count()) 

你幾乎肯定不希望try/catch塊存在,並直接返回是簡單了很多。同樣,除非您正在編寫適度複雜的查詢,否則使用查詢表達式確實沒有任何好處。學習直接使用擴展方法,以便每個查詢都可以編寫最簡單的代碼。

+0

我試過了;它不會編譯。現在我看了一下,錯誤是你不能將一個字典轉換成一個字典。猜猜我會將字典值的類型更改爲int。謝謝。 –

+0

@TonyVitabile:或者,或者使用'LongCount()'。我會編輯我的答案。 –