2017-08-09 8 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は3つのテーブルを持っているときはいつでも問題はありませんが、それが1つのテーブルを持っている場合、それは2番目の条件で失敗し、例外をスローするTable1を見つけることができません。そのテーブルが存在するかどうかを確認するためのポインタ。効率的な方法は、上記のコードでは

ありがとうございます。

+0

ループを使用して、データセット内のすべてのテーブルをループする必要があります。 dt1、dt2などのようなさまざまな変数を使用できるようにしたいと考えています。 –

+0

@ChetanRanpariya上記のコードでは、さまざまな変数を使用しています。サンプルを共有できますか? – Agasthya

+0

異なる変数を使いたい場合、その解決策は汚いでしょう。この種のコードが必要なユースケースについて説明できますか?次に、さまざまな変数を使用する必要はなく、目標を達成する必要のない適切なソリューションを提供できます。 –

答えて

1

これを行うにはいくつかの方法があります。たとえば、次の操作を行うことができますが、まだ3つの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(); 
} 
関連する問題