0

私は次のような非常に単純な構造を持っています:

var list = new List<CategoryInTimeItem>
        {
            new CategoryInTimeItem { Name = "Food", Year = 2012, Month = 1, Amount = 100 },
            new CategoryInTimeItem { Name = "Food", Year = 2012, Month = 2, Amount = 110 },
            new CategoryInTimeItem { Name = "Food", Year = 2012, Month = 3, Amount = 130 },
            new CategoryInTimeItem { Name = "Food", Year = 2012, Month = 4, Amount = 130 },
            new CategoryInTimeItem { Name = "Transport", Year = 2012, Month = 1, Amount = 1000 },
            new CategoryInTimeItem { Name = "Transport", Year = 2012, Month = 2, Amount = 1101 },
            new CategoryInTimeItem { Name = "Transport", Year = 2012, Month = 3, Amount = 1301 },
            new CategoryInTimeItem { Name = "Transport", Year = 2012, Month = 4, Amount = 1301 }
        };

この構造を再形成して、jsonにシリアル化されたときに、結果が次のようになるようにします。名前ごとに1つの配列です。

[
[["2012-1", 100], ["2012-2", 110], ["2012-3", 130], ["2012-4", 130]],
[["2012-1", 1000], ["2012-2", 1101], ["2012-3", 1301], ["2012-4", 1301]]
]

私のlinqクエリは次のようになります。

   result.Values = 
                from d in list
                orderby d.Name , d.Year , d.Month
                group d by d.Name
                into grp
                select new[]
                {
                    grp.Select(y => new object[] {y.DateName, y.Amount})
                };

これはほぼ機能しますが、追加の「レベル」の配列を取得するため、jsonにシリアル化すると、結果は次のようになります。

[
[[["2012-1", 100], ["2012-2", 110], ["2012-3", 130], ["2012-4", 130]]],
[[["2012-1", 1000], ["2012-2", 1101], ["2012-3", 1301], ["2012-4", 1301]]]
]

私はここで何が間違っているのですか?

4

1 に答える 1

2

代わりに、あなたはほとんどそこにいました

from d in list
...
select new[]
{
    grp.Select(y => new object[] {y.DateName, y.Amount})
}

単に:

from d in list
...
select grp.Select(y => new object[] {y.DateName, y.Amount}).ToList()

最後に不要なレベルの配列を追加しました。

于 2012-06-08T06:58:42.370 に答える