使用列名字符串c#从列获取值

时间:2012-03-21 00:50:40

标签: c#

我有两个清单..

第一个包含具有映射值的行,包括列名,xcord,ycord

第二个包含我需要映射的数据..

我需要使用第一行中的列名获取每行中的值..

例如

List<SheetMappings> smaps = new List<SheetMappings>();

foreach(maplist m in mlist)
{
  SheetMappings newMap = new SheetMappings();

  foreach(vallist v in vlist)
  {
    newMap.Value = v.{m.ColumnName};

    newMap.xCord = m.xCord;

    newMap.yCord = m.yCord;
  }

  smaps.Add(newMap);
}

任何赞助

干杯

格雷厄姆

编辑:

List<SpreadMappings> spreadMapping = new List<SpreadMappings>(); 
foreach (var m in mappings) 
{ 
    foreach (var v in hvalues) 
    { 
        SpreadMappings map = new SpreadMappings(); 
        switch (m.ColumnName) 
        { 
            case “DocHeading”: 
                map.ColumnX = m.ColumnX; 
                map.ColumnY = m.ColumnY; 
                map.ColumnValue = v.DocHeading; 
                map.ColumnName = m.ColumnName; 
                map.ColumnId = v.Id; 
                map.ColumnSheetName = sheetName; spreadMapping.Add(map); 
            break;

2 个答案:

答案 0 :(得分:0)

我认为“newMap.Value = v。{m.ColumnName}”部分会是这样的:

newMap.Value = v.FirstOrDefault( vitem => vitem.ColumnName == m.ColumnName );

这将为您提供“v”中的第一个项目,该项目具有与“m”的“ColumnName”属性匹配的“ColumnName”属性。这假设“vallist”的内容是具有“ColumnName”属性的对象。

答案 1 :(得分:0)

如果我理解你要做什么,你需要使用反射来获取由m.ColumnName表示的属性的值:

var smaps = new List<SheetMappings>(); 

foreach(maplist m in mlist) 
{
    var pi = typeof(vallist).GetProperty(m.ColumnName);

    var newMap = new SheetMappings(); 

    foreach(vallist v in vlist) 
    {
        newMap.Value = pi.GetValue(v, null); 
        newMap.xCord = m.xCord; 
        newMap.yCord = m.yCord; 
    } 
    smaps.Add(newMap); 
} 

因此,使用反射来获取m.ColumnName所代表的属性的PropertyInfo的引用,然后调用PropertyInfo.GetValue以从v获取该属性的值。