转换数据集代码VB.net到C#

问题描述:

我有以下VB.net代码:转换数据集代码VB.net到C#

Private Function ReorgFileDataset(ByRef InDataSet As DataSet) As DataSet 
    Dim _ResultDataRow, _DataRow As DataRow 
    Dim _ResultDataSet As New DataSet 
    Dim _ResultDataTable As New DataTable 
    _ResultDataSet.Tables.Add(_ResultDataTable) 
    Dim ColumnName, Value As String 
    Dim FileID As Integer 
    For Each _DataRow In InDataSet.Tables(0).Rows 
    ColumnName = _DataRow.Item("FKP_KEYWORD") 
    If Not _ResultDataTable.Columns.Contains(ColumnName) Then 
     _ResultDataTable.Columns.Add(ColumnName) 
    End If 
    Next 
    _ResultDataTable.Columns.Add("DATE_SENT") 

    _ResultDataRow = Nothing 
    For Each _DataRow In InDataSet.Tables(0).Rows 
    If FileID <> _DataRow.Item("FD_RID") Then 
     If Not _ResultDataRow Is Nothing Then 
      _ResultDataTable.Rows.Add(_ResultDataRow) 
     End If 
     FileID = _DataRow.Item("FD_RID") 
     _ResultDataRow = _ResultDataTable.NewRow() 
     _ResultDataRow.Item("DATE_SENT") = _DataRow.Item("FD_LASTMODIFIED") 
    End If 
    If _DataRow.Item("FKP_KEYWORD").GetType IsNot GetType(DBNull) And _ 
     _DataRow.Item("FKP_VALUE").GetType IsNot GetType(DBNull) Then 
     ColumnName = _DataRow.Item("FKP_KEYWORD") 
     Value = _DataRow.Item("FKP_VALUE") 
     _ResultDataRow.Item(ColumnName) = Value 
    End If 
    Next 
    If _ResultDataRow IsNot Nothing Then 
    _ResultDataTable.Rows.Add(_ResultDataRow) 
    End If 

    Return _ResultDataSet 
End Function 

当我通过转换器运行它,我得到这个C#代码:

private DataSet ReorgFileDataset(DataSet InDataSet) 
{ 
    DataRow _ResultDataRow = default(DataRow); 
    DataSet _ResultDataSet = new DataSet(); 
    DataTable _ResultDataTable = new DataTable(); 
    _ResultDataSet.Tables.Add(_ResultDataTable); 
    string ColumnName = null; 
    string Value = null; 
    int FileID = 0; 


    foreach (DataRow _DataRow in InDataSet.Tables[0].Rows) { 
     ColumnName = _DataRow.Item("FKP_KEYWORD"); 
     if (!_ResultDataTable.Columns.Contains(ColumnName)) { 
      _ResultDataTable.Columns.Add(ColumnName); 
     } 
    } 
    _ResultDataTable.Columns.Add("DATE_SENT"); 

    _ResultDataRow = null; 
    foreach (DataRow _DataRow in InDataSet.Tables[0].Rows) { 
     if (FileID != _DataRow.Item("FD_RID")) { 
      if ((_ResultDataRow != null)) { 
       _ResultDataTable.Rows.Add(_ResultDataRow); 
      } 
      FileID = _DataRow.Item("FD_RID"); 
      _ResultDataRow = _ResultDataTable.NewRow(); 
      _ResultDataRow.Item("DATE_SENT") = _DataRow.Item("FD_LASTMODIFIED"); 
     } 
     if (!object.ReferenceEquals(_DataRow.Item("FKP_KEYWORD").GetType, typeof(DBNull)) & !object.ReferenceEquals(_DataRow.Item("FKP_VALUE").GetType, typeof(DBNull))) { 
      ColumnName = _DataRow.Item("FKP_KEYWORD"); 
      Value = _DataRow.Item("FKP_VALUE"); 
      _ResultDataRow.Item(ColumnName) = Value; 
     } 
    } 
    if (_ResultDataRow != null) { 
     _ResultDataTable.Rows.Add(_ResultDataRow); 
    } 

    return _ResultDataSet; 
} 

我修改InDataSet.Tables(0)InDataSet.Tables[0]但是,有几个我无法修复的错误,因为intellisence没有DataRow的Item属性。我也不确定最后一条语句是否在检查空值。

我可以在这里得到一些帮助吗?

+0

你得到什么错误? 'DataRow.Item'在C#中是一个有效的属性,就像它在VB.NET中一样。最后一行等同于VB.NET代码中的最后一行 - 如果DataRow不为空,则将其添加到结果中。 'null'是C#VB.NET中的Nothing。 – Tim

+1

Item索引器隐含在C#类型中,所以在VB中如果使用'_DataRow.Item()',则在C#中它将是'_DataRow []'。由于你可以拥有一个名为'Item'的C#属性或方法,所以它对转换器来说是一件非常困难的事情,所以它通常需要安全的道路并将它放在那里,迫使你修复它们。 –

+0

正如我所说的,DataRow中的NO Item属性显示在Intellisense,ONLY ItemArray中。 – MB34

这SO张贴在这里几乎是重复......

In C#: Why no 'Item' on System.Data.DataRow?

更具体地讲,虽然,您可以访问使用索引数据列的列。例如,你有这行代码...

ColumnName = _DataRow.Item("FKP_KEYWORD"); 

你可以把它改成这个...

ColumnName = _DataRow["FKP_KEYWORD"].ToString(); 
+1

那么为什么不投票结束重复呢? –

+0

它在MSDN中显示为C#的有效属性。 – MB34

+0

仍然没有答案的最后一部分关于空值 – MB34