LINQ .ToArray在添加行之前进行一些额外的计算

时间:2013-03-12 08:55:28

标签: c# linq

我有以下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然后再乘以然后再转换为字符串

1 个答案:

答案 0 :(得分:1)

在这种情况下你不需要数组。考虑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;
  }
}