2012-01-27 16 views
0

IDのリストを受け取る次のクエリがあり、カウントを行います。 intとして定義された各プロパティの数を保持するオブジェクトモデルのCountModelもあります。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も常に整数になります。私はそれを私の自己を試していないし、VSのコードを書いていない

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

が、私はそれはあなたができる行う方法ほとんどだと思う:私は、代わりに辞書のために行く、このような何かをしようとするだろう

2

それをやる。これは、キーがステータスであり、値がそのステータスのカウントである辞書を提供します。

SomethingXという名前のプロパティを持つモデルを定義することはあまり柔軟性がありません。つまり、新しいステータスがある場合は、モデルを変更する必要があります。代わりに辞書の中にデータを保存することで、そのことを防ぐことができます。

関連する問題