2014-02-06 111 views
-7

任何一个可以转换这个C#LINQ代码到VB?我想developerfusion,didnt工作转换LINQ C#到VB.Net

DataTable dt = dt1.Copy(); 
     var result = dt 
      .AsEnumerable() 
      .Select(r => r.Field<string>(0)) 
      .Select(s => string.Join("", 
           s.Select((x, i) => x == '0' 
                ? " " 
                : (i + 1).ToString())) 
      ).ToList(); 

是我的尝试是

Dim dt As DataTable = dt1.Copy() 
    Dim result = dt.AsEnumerable().[Select](Function(r) r.Field(Of String)(0)).[Select](Function(s) String.Join("", s.[Select](Function(x, i) If(x = "0"c, " ", (i + 1).ToString())))).ToList() 

,但它显示错误

Data type(s) of the type parameter(s) in extension method 'Public Function Select(Of S)(selector As System.Func(Of String, S)) As System.Data.EnumerableRowCollection(Of S)' defined in 'System.Data.EnumerableRowCollectionExtensions' cannot be inferred from these arguments. Specifying the data type(s) explicitly might correct this error. 

我的数据表只有单列,看起来像第一行的第二排0010000 第三排0100000等等,我想得到的是用空白区和全部1代替它的位置编号即所有0;对于第一行,期望的输出像(1000000)。第二行(0030000)和第三行(0200000)。这样

+0

指定数据类型(S)您'没有work'意味着什么? –

+0

显示语法错误 – Cronaldo

+0

这些太多了倒票? – Cronaldo

回答

2

这里的工作示例:http://dotnetfiddle.net/LNksSW

原因你得到的错误是,你在你的文件的顶部缺少Imports System.Linq

Dim dt as DataTable = new DataTable 
dt.Columns.Add("col1") 
dt.Rows.Add("1000000") 
dt.Rows.Add("0010000") 
dt.Rows.Add("0100000")  

Dim result = dt _ 
    .AsEnumerable() _ 
    .Select(Function(r) r.Field(Of String)(0)) _ 
    .Select(Function(s) string.Join("", s.Select(Function(x, i) _ 
     If(x = "0", "0", (i + 1).ToString())))).ToList() 

For Each i As String in result 
    Console.WriteLine(i) 
Next 
+0

在扩展方法'Public Function Select(Of S)(选择器为System.Func(Of String,S)中获取类型参数的数据类型))由于System.Data.EnumerableRowCollection(Of S)'在'System.Data.EnumerableRowCollectionExtensions'中定义的不能从这些参数中推断出来。明确指定数据类型可能会纠正此错误。' – Cronaldo

+0

@Cronaldo - 你能发表你的数据表看起来像什么样的小样本?或者更好还是在http://dotnetfiddle.net/ –

+0

@Cronaldo创建一个示例 - 这里是一个工作dotnetfiddle示例 - http://dotnetfiddle.net/VTq4j3 –

0

异常明确地告诉你在选择

Dim dt As DataTable = New DataTable() 
Dim result = dt. 
    AsEnumerable(). 
    Select(Function(r As DataRow) r.Field(Of String)(0)). 
    Select(Function(s As String) String.Join(
       "", s.Select(Function(x As Char, i As Integer) 
           Return If(x = "0"c, " ", (i + 1).ToString()) 
          End Function))). 
    ToList() 
+0

stil同样错误 – Cronaldo