【问题标题】:How can I convert EnumerableRowCollection<string[]> to a regular string array?如何将 EnumerableRowCollection<string[]> 转换为常规字符串数组?
【发布时间】:2019-09-16 18:17:05
【问题描述】:

如何将 EnumerableRowCollection 转换为常规字符串数组?

这是我的代码。

var trackerCodes = from a in excelData.AsEnumerable() select new[] { a[TrackerCodeColumnIndex].ToString() };

var resizeInfo = from a in excelData.AsEnumerable() select new[] { a[ResizeInfoColumnIndex].ToString() };

我想将这两个 EnumerableRowCollections 转换为常规字符串数组。

提前谢谢你。

【问题讨论】:

  • 为什么你的selectnew[] 而不是只返回strings,给你两个IEnumerable&lt;string&gt;,然后你可以和ToArray一起使用?
  • 我从另一个线程复制了这段代码。通过将其更改为字符串,代码将无法编译。不过,我已经找到了一个解决方案,但如果你能告诉我你正在解释的代码,那就太好了?

标签: c# arrays string linq


【解决方案1】:

除非您需要返回IEnumerable&lt;string[]&gt;,否则只需返回IEnumerable&lt;string&gt;

var trackerCodes = from a in excelData.AsEnumerable() select a[TrackerCodeColumnIndex].ToString();
var resizeInfo = from a in excelData.AsEnumerable() select a[ResizeInfoColumnIndex].ToString();

然后您可以通过以下方式将每个转换为数组:

var trackerCodesArray = trackerCodes.ToArray();
var resizeInfoArray = resizeInfo.ToArray();

当然,如果你只想要数组,你可以将它们组合成一个表达式:

var trackerCodes = (from a in excelData.AsEnumerable() select a[TrackerCodeColumnIndex].ToString()).ToArray();
var resizeInfo = (from a in excelData.AsEnumerable() select a[ResizeInfoColumnIndex].ToString()).ToArray();

虽然那时我很想使用 lambda / fluent 查询语法:

var trackerCodes = excelData.AsEnumerable().Select(a => a[TrackerCodeColumnIndex].ToString()).ToArray();
var resizeInfo = excelData.AsEnumerable().Select(a => a[ResizeInfoColumnIndex].ToString()).ToArray();

当然,通常首选.Field&lt;string&gt;(index) 而不是[index].ToString()

而且,如果您不是特别需要数组,使用 ToList 比使用 ToArray 更好。

【讨论】:

  • 非常感谢!搞定了。
【解决方案2】:

你可以使用 Linq 的 SelectMany 方法将两者都放入一个可枚举中。例如:

var superArray = (new[] {trackerCodes, resizeInfo}).SelectMany(x => x);

【讨论】:

  • 谢谢,但我不想合并它们。我的最终目标是制作一个字典,其中键是 trackerCodes 中的相应值,值是 resizeInfo 中的相应值。它们的大小相同。
  • 为什么你需要“select new[] ...”只需“select a[TrackerCodeColumnIndex].ToString()”你会得到 IEnumerable 然后你可以使用 .ToArray() 方法.我认为问题是“new [] {...}”,因为您正在为每个字符串值创建一个包含一个字符串值的数组
  • var trackerCodes = from a in excelData.AsEnumerable() select string a[TrackerCodeColumnIndex].ToString();这也没有编译。很抱歉我以前从未使用过这种结构。
  • 正如我在评论中提到的,它是“select a[TrackerCodeColumnIndex].ToString()”,没有“string”这个词,你正在添加字符串
【解决方案3】:

    List<string> trackerCodes = excelData.AsEnumerable()
                                         .Select(r => r.Field<string("START"))
                                         .ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-05
    • 2011-05-12
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多