2016-03-15 3 views
1

Я работаю с Open XML & У меня есть структура IDictionary<String, List<OpenXmlCompositeElement>>. Я хочу работать со частью списка в структуре, но this.map.Values ​​пытается обернуть ее в ICollection. Как я могу получить часть списка из моей структуры?IDictionary <String, List <OpenXmlCompositeElement >> - получить список <OpenXmlCompositeElement>?

public List<OpenXmlCompositeElement> MapData() 
    { 
     //this does not work 
     return this.map.Values; 
    } 
+0

какой? может быть больше одного. –

+1

Просто используйте ключ для доступа к тому, который вы хотите. Или через словарь? 'Список list = dictionary [" key "];' – iswinky

+0

да, я наконец понял, что есть несколько списков :). Это, наконец, дало мне то, что я искал: test = dynamicContent.MapData(). Любой (l => l.Any (i => i.Descendants(). OfType () .Count()> 0)); Мне нужно было определить, есть ли в моем элементе Open XML Elements какие-либо изображения. –

ответ

2

Поскольку это словарь, он ожидает, что вы скажете, с какого ключа вы хотите получить значение.

Так это будет код, который нужно, где yourKey ключ вы хотите получить:

public List<OpenXmlCompositeElement> MapData() 
{ 
    return this.map["yourKey"]; 
} 

Если вы не заинтересованы в ключе, и словарь это просто словарь, потому что сериализатору говорит таким образом, вы можете получить первый элемент, например, так:

public List<OpenXmlCompositeElement> MapData() 
{ 
    return this.map.Values.First(); 
} 
+0

this.map.Values.First() дал мне то, что я искал. Благодарю. –

0

вы можете перебрать словарь и использовать значение, которое вы хотели бы, или получить доступ к списку непосредственно с помощью ключа (в данном случае это строка)

IDictionary<String, List<OpenXmlCompositeElement>> myDictionary; 

List<OpenXmlCompositeElement> myList = myDictionary["myKey"]; 

Где myKey доступен в словаре.

В качестве альтернативы вы можете перебрать

foreach (var item in myDictionary) 
{ 
    var key = item.Key; 
    var value = item.Value 

    // You could then use `key` if you are unsure of what 
    // items are in the dictionary 
} 
0

Если предположить, что это ваш словарь ...

IDictionary<string, List<OpenXmlCompositeElement>> items = ...; 

Получить конкретный список по ключу ...

List<OpenXmlCompositeElement> list = items["key"]; 

Получить первый список в словаре ...

List<OpenXmlCompositeElement> list = items.Values.First(); 

Объединить все списки в словаре в единый список ...

List<OpenXmlCompositeElement> list = items.SelectMany(o => o).ToList(); 
0
foreach(KeyValuePair<string, List<OpenXmlCompositeElement>> kvp in IDictionary) 
    { 
    string key = kvp.key 
    List<OpenXmlCompositeElement> list = kvp.Value; 
     foreach(OpenXmlCompositeElement o in list) 
     { 
     Do anything you need to your List here 
     } 
    } 

Я работаю со словарями, а, так вот реальный пример того, что я работаю с:

foreach(KeyValuePair<string, List<DataRecords>> kvp in vSummaryResults) 
     { 
      string sKey = kvp.Key; 
      List<DataRecords> list = kvp.Value; 
      string[] vArr = sKey.Split(','); 

      int iTotalTradedQuant = 0; 
      double dAvgPrice = 0; 
      double dSumQuantPrice = 0; 
      double dQuantPrice = 0; 
      double dNumClose = 0; 

      foreach (DataRecords rec in list) 
      { 
       if(vSummaryResults.ContainsKey(sKey)) 
       { 
        iTotalTradedQuant += rec.iQuantity; 
        dQuantPrice = rec.iQuantity * rec.dInputTradePrice; 
        dSumQuantPrice += dQuantPrice; 
        dAvgPrice = dSumQuantPrice/iTotalTradedQuant; 
        dNumClose = rec.dNumericClosingPrice; 

       } 

       else 
       { 
        vSummaryResults.Add(sKey, list); 
        //dNumClose = rec.dNumericClosingPrice; 
       } 
Смежные вопросы