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然后再乘以字符串
在这种情况下你不需要一个数组。考虑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;
}
}