LINQ . toarray在添加行之前做一些额外的计算

本文关键字:计算 toarray 添加行 LINQ | 更新日期: 2023-09-27 18:03:23

我有以下linq查询

 foreach (var row in nodes.
      Select(tr => tr.Elements("td")
       .Select(td => td.InnerText.TrimEnd())
       .ToArray()))
{
   mydatatable.Rows.Add(row);
}

我可以在linq语法中根据其他数组索引的值添加元素到数组中,而不必再循环一次吗?

例如,

生成的数组将看起来像["xx","9.4",1.4"],我试图添加另一个元素例如,第二个元素乘以第三个元素因此它将看起来像["xx","9.4","2","18.8"]并且肯定是字符串格式,因此需要强制转换为double然后再乘以字符串

LINQ . toarray在添加行之前做一些额外的计算

在这种情况下你不需要一个数组。考虑IList<T>,并在LINQ之外进行这些计算,以提高性能、可读性和访问权限。

IList<int> rows = nodes.Select(tr => tr.Elements("td")).Select(td => Convert.ToInt32( td.InnerText.TrimEnd())).ToList();
rows.Add(rows[1] * rows[2]);

注意:我知道你可能没有整数,因为我对示例代码进行了强制转换,否则你不能乘法。

IList<string> strs = nodes.Select(tr => tr.Elements("td")).Select(td => td.InnerText.TrimEnd()).ToList();
var ints = strs.Select(str => str.TryGetInt()).Where(i => i.HasValue).Select(i => i.Value);
strs.Add((ints[0] * [ints[1]).ToString());
public static class Extensions
{
  public static int? TryGetInt(this string item)
  {
    int i;
    bool success = int.TryParse(item, out i);
    return success ? (int?)i : (int?)null;
  }
}