2017-08-09 53 views
0
public void Method1() 
{ 
    Datatable dt1 = new DataTable(); 
    Datatable dt2 = new DataTable(); 
    Datatable dt3 = new DataTable(); 

if (ds.Tables.Count > 0) 
{  
     if (ds.Tables[0].Rows.Count > 0) 
      dt1 = ds.Tables[0]; 
     if (ds.Tables[1].Rows.Count > 0) 
       dt2 = ds.Tables[1]; 
      if (ds.Tables[2].Rows.Count > 0) 
       dt3 = ds.Tables[2];    
} 
} 

在上面的代码是没有更好的方法来检查的数据集表“DS”的确切人数,每当DS有三个表没有问题,但如果它有一个表,它会在第二个条件失败并抛出异常时找不到Table1。检查表是否存在的任何指针。的数据来检查数据表高效的方式设置

谢谢。

+0

您需要使用循环遍历数据集中的所有表。你想能够使用不同的变量,如dt1,dt2等。 –

+0

@ChetanRanpariya在上面的代码中,您可以看到使用不同的变量。你能分享一个样本吗? – Agasthya

+0

如果你想使用不同的变量,那么解决方案将是肮脏的。你能解释一下你需要这种代码的用例,那么你可以提供适合的解决方案,你不需要使用不同的变量,仍然可以实现你的目标。 –

回答

1

有几种方法可以做到这一点。例如,你可以做到以下几点,如果你仍然要三个DataTable对象:

public void Method1() 
{ 
    DataTable dt1 = ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0 ? ds.Tables[0] : new DataTable(); 
    DataTable dt2 = ds.Tables.Count > 1 && ds.Tables[1].Rows.Count > 0 ? ds.Tables[1] : new DataTable(); 
    DataTable dt3 = ds.Tables.Count > 2 && ds.Tables[2].Rows.Count > 0 ? ds.Tables[2] : new DataTable(); 
} 

更动态的方式将所有的表存储在像这样的列表:

public void Method1() 
{ 
    List<DataTable> dataTables = new List<DataTable>(); 

    foreach (DataTable dataTable in ds.Tables) 
    { 
     if (dataTable.Rows.Count > 0) dataTables.Add(dataTable); 
    } 

} 

或使用LINQ

public void Method2() 
{ 
    List<DataTable> dataTables = ds.Tables.Cast<DataTable>().Where(dataTable => dataTable.Rows.Count > 0).ToList(); 
}