2012-04-04 96 views
3

我有一個匿名對象列表,其中包含C#中的以下字段從LINQ查詢派生。如何使用LINQ將數組對象轉換爲另一個?

{ 
String category 
decimal Jan 
decimal Feb 
decimal Mar 
decimal Apr 
decimal May 
decimal Jun 
decimal Jul 
decimal Aug 
decimal Sep 
decimal Oct 
decimal Nov 
decimal Dec 
} 

我如何可以創建具有用於類別的每個值的一個字段的對象的列表(因此基本上12對象的一個​​對象每個月(一月,二月,行軍等)。

ExpectedResult { 
string Month, 
decimal category1, 
decimal category2, 
decimal category3, 
... 
decimal categoryN 
} 

所以結果將ExpectedResult的12個物體 不知道有多少種類/是一個問題 有快捷的建議將是有益的

+0

因此,新對象看起來像'var Jan = {Cat1Name = 1.3,Cat2Name = 15.5,Cat3Name = 90.6,...}'?如果類別名稱不是有效的C#標識符,該怎麼辦? – mellamokb 2012-04-04 21:22:16

+0

我想要一個var newItem = new {Month = Jan,Cat1Name = 1.3,cat2Name = 13.5 ...} – 2012-04-04 21:25:36

+1

什麼是原始查詢? – Phil 2012-04-04 21:29:38

回答

2

你可以嘗試的SelectMany()方法:。

anonymousList.SelectMany(x=>new[]{ 
            new {Cat=category, Month="Jan", Val=Jan}, 
            new {Cat=category, Month="Feb", Val=Feb}, 
            ... , 
            new {Cat=category, Month="Dec", Val=Dec} 
           }); 

對於您的每個源匿名對象,此查詢將生成一個由12個新匿名對象組成的數組,然後這些數組(作爲Enumerables)將被連接成一個大集合。

,只是爲了避免以後比較字符串,可以考慮使用一個枚舉的一年中的月份(不幸的是.NET沒有一個內置):

public enum Month 
{ 
    January = 1, 
    February = 2, 
    ... 
    December = 12 
} 

... 

anonymousList.SelectMany(x=>new[]{ 
            new {Cat=category, Month=Month.January, Val=Jan}, 
            new {Cat=category, Month=Month.February, Val=Feb}, 
            ... , 
            new {Cat=category, Month=Month.December, Val=Dec} 
           }); 
+0

這不是OP所需要的。他希望以下定義的幾個匿名類:{public string Month,public decimal Category1,public decimal Category2,public decimal Category3}其中Category1..n是來自上一個查詢的值。這是不可能的(不包括髮射IL代碼:)) – 2012-04-04 23:36:45

+0

@KeithS,試過你的解決方案。它創建了多個條目。我們期望的是12條記錄的合併結果 - 每個月一條。不幸的是,一旦你創建了新的類別,我無法將它們分組。 – 2012-04-05 13:38:36

0

從KeithS開始回答您能集團這種由月:

var results = from x in KeithsAnswer 
       group x by x.Month into g 
       select new { Month = g.Key, CategoryValues = g.Select(c => new { c.Month, c.Val }).ToArray()}; 

您可以直接把它傳遞給客戶端過程中存在或如果你真的需要你上面指定的形式,你可以實現自己的JavaScriptConverter或使用動態/ ExpandoObject存儲值屬性。

相關問題