5

次のようなデータが返されます。

Model { Guid Id }

合計アイテムの int がありint totalCountます。

カテゴリ 1 として返されたデータから個別の数を取得しようとしています。合計アイテムからカテゴリ 1 の数を引いたものがカテゴリ 2 になります。

カテゴリ 1 の個別のカウントを取得する次の linq がありますが、カテゴリ 2 のカウントを IEnumerable に追加するにはどうすればよいですか?

var result = data.
    GroupBy(x => x.Id).
    Select(x => new { Category = "1", Value = x.Select(v => v.Id).Distinct().Count() }).
    GroupBy(x => x.Category).
    Select(x => new Item { Category = x.Key, Value = x.Sum(y => y.Value) });

Item Class には 2 つのメンバーがあります。Category の文字列と Value の decimal です。

ありがとう!


編集:したがって、次のデータIEnumerable<Model> dataがあり、次のデータが含まれています:

{ Id: 1 }
{ Id: 2 }
{ Id: 2 }
{ Id: 1 }
{ Id: 3 }
{ Id: 4 }

および totalCount = 10 です。

データから Id の個別のカウント (この場合は 4) をカテゴリ 1 として取得し、totalCount - 個別の項目をカテゴリ 2 として取得したいと考えています。したがって、結果として次のようになりますIEnumerableItem

{ Category: "1", Value: 4 }, { Category: "2", Value: 6 }

今のところ、私の linq ステートメントは return のみ{ Category: "1", Value: 4 }であり、次に何をすべきかわかりません。

4

3 に答える 3

13

あなたの質問はあまり明確ではありませんが、私はこれがあなたが望むものだと思います:

int totalCount = data.Count();
int distinctCount = data.Select(x => x.Id).Distinct().Count();
List<Item> result = new List<Item>
{
    new Item() { Category = "1", Value = distinctCount },
    new Item() { Category = "2", Value = totalCount - distinctCount },
};
于 2012-08-27T23:47:18.210 に答える
0

1 日の終わりに 2 つのオブジェクトが必要ですか、それとも 1 回の返品の一部でよいでしょうか? あなたはただ行うことができます:

var result = data.
    GroupBy(x => x.Id).
    Select(x => new { 
       DistinctCount = x.Select(v => v.Id).Distinct().Count(),
       TotalCount = data.Count()
    });

これまたは同様のものがおそらく機能します。

于 2012-08-27T23:43:32.220 に答える
0

私は状況に直面するためにデータ構造を使用します。

Dictionary< string, List< YOUR_TYPE >> dictionary = new Dictionary<string, List< YOUR_TYPE >> ();

ソースからさまざまなキーを取得できます。

var keys = YOUR_DATA_SOURCE.Select(item => item.YOUR_KEY_NAME ).Distinct();

SQL のように: "SELECT DISTINCT YOUR_KEY_NAME FROM YOUR_DATA_SOURCE".

foreach (var key in keys) {
    var list = new List< YOUR_TYPE > ();
    list.AddRange (dataSource.Where (x => x.YOUR_Filter_Property == YOUR_KEY_NAME ).ToList ());

    dictionary.Add (key, list);
}

次に、「ContainKey」、「Keys」などのディクショナリのデフォルト機能を使用できます。

于 2014-07-28T05:06:25.090 に答える