2014-02-06 116 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