2010-07-22 51 views
0
Dictionary<string,string> items = new Dictionary<string,string>(); 

IEnumerable<string> textvalues = from c in......//using linQ to query 

string s = textvalues[items["book"]]; 

在这种情况下,textvalues阵列将接受一个整数值返回字符串我value.How可以得到项目编号,说:“项目”有5个itemNames中和“书”是在第一个位置的话,我必须得0 。所以textvalues [项目[“书”]]将被翻译为textvalues [项目[0]]有没有办法获得字典项目的订单号?

好吧,我想使用OpenXML 2.0来读取Excel.The点这里是没有办法,我可以指定一个字段名称并获取值。 所以我试图迭代工作表的第一行,将值添加到字典Dictionary fieldItems,以便当我说fieldItems [“状态”]它会检索我基于列号的单元格值,在我的情况下列标题name.ok这里是它的代码。

 Dictionary<string, int> headers = new Dictionary<string, int>(); 
     IEnumerable<string> ColumnHeaders = from cell in (from row in worksheet.Descendants<Row>() 
              where row.RowIndex == 1 
              select row).First().Descendants<Cell>() 
              where cell.CellValue != null 
              select 
              (cell.DataType != null 
               && cell.DataType.HasValue 
               && cell.DataType == CellValues.SharedString 
              ? sharedString.ChildElements[ 
               int.Parse(cell.CellValue.InnerText)].InnerText 
              : cell.CellValue.InnerText); 


      int i=0; 
     Parallel.ForEach(ColumnHeaders, x => { headers.Add(x,i++); }); 


order.Number = textValues[headers["Number"]]; 
+0

IEnumerable 是否有索引存取?您可能需要以某种方式使用IList 。 – 2010-07-22 10:06:52

+1

IEnumerable 没有索引存取器。 – TheFogger 2010-07-22 10:28:03

+0

目前还不清楚什么是文字值,但我已经编辑了我的答案*可能*帮助你... – 2010-07-22 10:31:11

回答

0

(该死,我没看错了,毕竟,而且也没有编辑历史在前五分钟。)

你的问题有点混乱的呈现......但它似乎你基本上试图找到一个词典中的一个项目的“位置”。 Dictionary<TKey, TValue>中没有这样的概念。您应该将其视为集合从键到值的映射。

显然,当你迭代映射集合中的条目时,它们会以某种顺序出现 - 但不能保证它将与条目的添加顺序有任何关系。如果您使用SortedDictionary<,>SortedList<,>(两者都是真正的字典),您可以按排序的键顺序获取条目......但尚不清楚这对您是否足够好。

目前还不清楚你真的想达到什么 - 你在文本中调用textvalues数组,但声明它为IEnumerable<string> - 它看起来像你然后试图使用带有字符串参数的索引器...

编辑:好的,现在这个问题已被编辑,你有Dictionary<string, int>而不是Dictionary<string, string> ...所以整个事情更有意义。现在很容易:

order.Number = textValues.ElementAt(headers["Number"]); 
+0

OP的最后一句话表明他正在寻找像'items.FirstIndexOf(“Book” )'。如果存在这样的事情。只有'items'与'textvalues'具有相同的顺序才有意义。 – 2010-07-22 10:25:32

+0

@Phil:确切地说,作为'items'是一个'Dictionary',不应该依赖顺序。然而,在编辑之后,更明显的是你可以做什么...... – 2010-07-22 10:30:31

+0

Jon,我想我们甚至不需要指定“ElementAt”。只是textValues [headers [“Number”]]的作品:-) – DeveloperCSharp 2010-07-22 10:33:34

相关问题