2012-01-27 84 views
0

我有以下查詢接收ID的列表,我想做一個計數。還有一個對象模型CountModel,它保存每個屬性定義爲int的計數。linq-to-sql中的分組和計數

public class GetCountByStatus(List<int> TheIDs) 
{ 
...using MyDC... 
var CountData = (from d in MyDC.Data 
        where TheIDs.Contains(d.ID) 
        group d by d.Status into statusgroup 
        select new CountModel() 
        { 
        CountStatus1 = (from g in statusgroup 
            where g.Status == 1 
            select g).Count(), 

        CountStatus2 = (from g in statusgroup 
            where g.Status == 2 
            select g).Count(), 

        CountStatusN = .... 

        }).Single(); 

如果例如沒有狀態爲N的元素,此代碼是否會崩潰或CountStatusN的計數爲0?這是做我想做的最好的方式嗎?

謝謝。

回答

1

Count()將始終返回一個整數,即如果沒有具有給定狀態的元素,則爲0。因此CountStatusN也總是一個整數。

2

我會去的,而不是字典,嘗試這樣的事情:

var countData = MyDC.Data.Where(y => TheIDs.Contains(y.ID)) 
    .GroupBy(y => y.Status).ToDictionary(y => y.Key, y => y.Count()); 

我還沒有嘗試過我自己,而不是寫在VS的代碼,但我認爲這是幾乎所有你怎麼做能做到這一點。這將給你一個字典,其中的關鍵是狀態,值是該狀態的計數。

定義名爲SomethingX的屬性的模型不是很靈活。這意味着當有新的狀態時,你必須改變模型。將數據保存在字典中會讓你免於此。