【问题标题】:Datatable datarow in LinqLinq 中的数据表数据行
【发布时间】:2014-01-30 12:26:59
【问题描述】:

我有一个数据表,其中有一列是 column1,它包含许多行,就像

rows[0]=1001000
rows[1]=1000001

等; 我想要实现的是使用 LINQ.ie 将 0 转换为空间;预期的结果会像

rows[0]=1  4   
rows[1]=1     7     

等;

我有一个用于连接不同列然后执行函数的 linq 代码。但我想在一行中进行计算。我的代码是

var rows = dtFilter.AsEnumerable()
    .Select(row => 
        string.Join("",
            dtFilter.Columns.Cast<DataColumn>()
               .Select(col => row.Field<string>(col) == "0" ? " " : (col.Ordinal + 1).ToString()))
    )
    .ToList();

【问题讨论】:

  • rows[0]=1001000 是什么意思?你有单列的行吗?
  • 是单列,但有几行....我需要在每一行中进行计算并将数据存储在列表中
  • 您需要行列表还是字符串列表?

标签: .net linq datatable linq-to-objects


【解决方案1】:

从每一行的第一列中选​​择值,然后用空格替换零并将结果转换为列表:

List<string> result = dtFilter.AsEnumerable()
                              .Select(r => r.Field<string>(0))
                              .Select(s => s.Replace("0", " "))
                              .ToList();

【讨论】:

  • 你的回答很有效......但我的问题略有变化......请检查
【解决方案2】:

类似的东西

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 发生了什么:

当您对字符串执行Select 时,它会被投射到IEnumerable&lt;char&gt;

然后,Select 的重载,其中选择器参数是 Func&lt;TSource, Int32, TResult&gt;Func的第二个参数代表源元素的索引。

所以对于我们字符串中的每个字符,我们都这样做

如果等于 1,则获取字符串中 char 的索引(+1,从 0 开始)。我们可以使用Func 的第二个参数(在本例中为i,而x 代表字符)

否则,得到一个空格。

所以IEnumerable&lt;char&gt; 中的每个字符都是这样计算的。

现在,我们有了一个带有“转换字符”的IEnumerable&lt;char&gt;

我们在IEnumerable&lt;char&gt; 上执行string.Join 以获取字符串。

【讨论】:

  • @AnilkumarM 我希望如此;)
  • 你能把这个转换成vb吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多