将字符串转换为数组不起作用

时间:2017-08-22 00:32:53

标签: c# arrays list arraylist

我正在浏览列表并从每条记录中提取位置值

string allPositionsListed = "";
int lastRecord = volunteerAssignmentList.Count;
int currentRecord = 0;
foreach (Volunteer va in volunteerList)
{
  currentRecord++;
  if (currentRecord == lastRecord)
  {
      allPositionsListed += va.Position;
  }
  else
  {
     allPositionsListed += va.Position + ",";
  }
}

//allPositionsListed returns: "51000785,52012986"

我写了一个查询,从找到位置的positionTable中提取所有记录。 如果我使用

var allPositions = new string[] { "51000785", "52012986" };

List<PositionTable> positionList = (from p in DbContext.PositionList
                 where allPositions.Contains(p.Position)
                select p).ToList();

这会返回正确的结果...但是由于allPositions值可能不同,我如何将其转换为必要的字符串数组。 我试过了

var allPositions2 = allPositionsListed.ToArray();

but this returns 
[0]5
[1]1
[2]0
[3]0
[4]7
etc...

when I need 
[0]51000785
[1]52012986

2 个答案:

答案 0 :(得分:2)

不是从初始数据生成字符串,而是直接转到可枚举,这样的东西应该可以工作:

var allPositions = volunteerList
    .Select(v => v.Position)
    .ToList();

这将允许您现在执行此操作:

var positionList = (from p in DbContext.PositionList
                    where allPositions.Contains(p.Position)
                    select p)
    .ToList();

答案 1 :(得分:1)

只需使用Split方法:

var allPositionsListed = "51000785,52012986";
var allPositions2 = allPositionsListed.Split(',');

allPositions2将是:
allPositions2 [0] - &gt; &#34; 51000785&#34;
allPositions2 [1] - &gt; &#34; 52012986&#34;

如果你看到KB,它会说明String#ToArray方法的输出

  

包含输入序列中元素的数组。

所以,它按预期工作(当然)!你需要使用正确的方法。