2013-03-12 56 views
0

之前做一些额外的计算,我下面LINQ查询LINQ .ToArray添加行

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

我可以添加elments像基于其他阵列indecies值的LINQ语法内arthmatic计算阵列,而不必循环一次?

例如,结果数组看起来像["xx","9.4",1.4"],我想添加另一个elment例如第三个元素的第二个元素的乘法,所以它看起来像["xx","9.4","2","18.8"],肯定它的字符串格式,所以需要然后再乘以字符串

+0

你可以显示你正在尝试做什么没有linq? – 2013-03-12 08:58:49

+0

我在这里没有看到任何算术计算。也看起来像你正在解析HTML – 2013-03-12 08:58:59

+0

你可以显示一个示例输入和输出? – LukeHennerley 2013-03-12 09:01:12

回答

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; 
    } 
} 
+0

问题是它的字符串,整数和小数的组合 – user1590636 2013-03-12 09:10:16

+0

@ user1590636我已经发布了替代解决方案 – LukeHennerley 2013-03-12 09:12:00

+0

确实认为这会比不使用LINQ做另一个循环更快,其他看起来很棒:) – user1590636 2013-03-12 09:14:56