2015-08-31 3 views
0

У меня есть объект, такой какLinq Свести словарь в объекте

public class Sales 
{ 
public string Year { get; set; } 
public string Item {get; set;} 
public Dictionary<string,double> Sales { get; set; } 
} 

Это затем хранится в Dictionary<string,double>.

Так позволяет сказать, что у меня есть два Sales объекты, созданные, например, как:

obj 1 = { 
    Year = "2015", 
    Item = "Banana", 
    Sales = { 
     {"Week1", 2} 
     {"Week2", 24} 
     {"Week3", 69} 
    } 
} 

obj 2 = { 
    Year = "2015", 
    Item = "APPLE", 
    Sales = { 
     {"Week1", 3} 
     {"Week2", 4} 
     {"Week3", 8} 
    } 
} 

Как бы я написать Linq запрос, который будет возвращать результат в сетке так, чтобы он имел следующие выходные строки

Row 1: год, категория, Week1, Week2, Week3

строка 2: 2015, банан, 2, 24, 69

строка 3: 2015, Apple, 3, 4, 8

ответ

0

Я бы поместил все в DataTable, а затем создавал datatable источник данных элемента управления.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 
using System.Data; 

namespace ConsoleApplication45 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      List<Sales> sales = new List<Sales>() { 
       new Sales() { 
        year = 2015, item = "Banana", sales = new Dictionary<string,double>() { 
        {"Week1", 2}, {"Week2", 24},{"Week3", 69} 
        } 
       }, 
       new Sales() { 
        year = 2015, item = "Apple", sales = new Dictionary<string,double>() { 
        {"Week1", 3}, {"Week2", 4},{"Week3", 8} 
        } 
       } 

      }; 
      DataTable dt = new DataTable(); 
      dt.Columns.Add("Year", typeof(int)); 
      dt.Columns.Add("Category", typeof(string)); 
      dt.Columns.Add("Week1", typeof(double)); 
      dt.Columns.Add("Week2", typeof(double)); 
      dt.Columns.Add("Week3", typeof(double)); 

      foreach(Sales sale in sales) 
      { 
       dt.Rows.Add(new object[] { 
        sale.year, 
        sale.item, 
        sale.sales["Week1"], 
        sale.sales["Week2"], 
        sale.sales["Week3"] 
       }); 
      } 


     } 
    } 
    public class Sales 
    { 
     public int year { get; set; } 
     public string item { get; set; } 
     public Dictionary<string, double> sales { get; set; } 
    } 
} 
+0

Не совсем то, что я искал, но я получил его для работы с использованием вашего кода, так что спасибо! – Chadbur

Смежные вопросы