我有一个数据表,其列为column1,它包含许多行,就像
rows[0]=1001000
rows[1]=1000001
等; 我想要实现的是使用LINQ.ie将空间转换为0;预期的结果将是
rows[0]=1 4
rows[1]=1 7
等;
我有一个linq代码用于汇总不同的colums然后执行该功能。但我想在一行中进行计算。我的代码是
var rows = dtFilter.AsEnumerable()
.Select(row =>
string.Join("",
dtFilter.Columns.Cast<DataColumn>()
.Select(col => row.Field<string>(col) == "0" ? " " : (col.Ordinal + 1).ToString()))
)
.ToList();
答案 0 :(得分:1)
从每行的第一列中选择值,然后用空格替换零并将结果转换为列表:
List<string> result = dtFilter.AsEnumerable()
.Select(r => r.Field<string>(0))
.Select(s => s.Replace("0", " "))
.ToList();
答案 1 :(得分:1)
类似的东西
var elements = new []{"1001000", "1000001"};
var result = elements
.Select(m => string.Join("", m.Select((x, i) => (x == '1' ? (i+1).ToString() :" "))));
所以使用您的代码
var result = dtFilter
.AsEnumerable()
.Select(r => r.Field<string>(0))
.Select(s => string.Join("",
s.Select((x, i) => x == '1'
? (i+1).ToString()
: " "))
);
如果需要,最后添加一点.ToList()
修改强>
第二次选择中发生了什么:
当您对字符串执行Select
时,它会投射到IEnumerable<char>
。
然后,Select超载,其中selector参数为Func<TSource, Int32, TResult>
。 Func
的第二个参数表示源元素的索引。
因此,对于字符串中的每个字符,我们都会
如果它等于1,则获取字符串中char的索引(+1,从0开始)。我们可以使用Func
的第二个参数(在这种情况下为i
,而x
代表char)
否则,请获得一个空白区域。
因此IEnumerable<char>
中的每个字符都以这种方式计算。
现在,我们已经有了IEnumerable<char>
我们的“变形人物”。
我们在string.Join
上执行IEnumerable<char>
以获取字符串。