2016-11-25 3 views
0

に条件および更新値をチェックする方法以下は、私はcsvファイルにデータテーブルの書き込みに使用していたコードの一部です:はIEnumerableを

foreach (DataRow row in reportDataTable.Rows) 
{ 
    IEnumerable<string> fields = row.ItemArray.Select(field => string.Concat("\"", field.ToString().Replace("\"", "\"\""), "\"")); 
    stringBuilder.AppendLine(string.Join(",", fields)); 
} 

をそれがで空の文字列をチェックすることが可能ですそれらをStringBuilderオブジェクトに追加する前に "Not Available"のようなデフォルトのテキストに置き換えますか?

私が使用しています:

答えて

1

が変更

foreach (var fieldValue in fields) 
{ 
    if (fieldValue.ToString() == "\"\"") 
     fieldValue.Replace("\"\"", "\"N.A.\""); 
} 

をしかし、細胞はcsvファイルに空白のままご.Select()あなたが選択内容を変更したい場合:

var fields = row.ItemArray.Select(field => string.IsNullOrEmpty(field.ToString()) ? "\"N/A\"" : string.Concat("\"", field.ToString().Replace("\"", "\"\""), "\"")); 

stringBuilder.AppendLine(string.Join(",", fields)); 
+0

予期せずアプリケーションが停止したサーバーが停止しました。ちょうど数分前に再びアクセス可能になった。あなたが答えに示唆したことを実装することが私が最​​初にしたことでした。 – ShyProgrammer

+0

パーフェクト。ありがとうございました。 – ShyProgrammer

0

IEnumerable<string> fieldsがありますタイプIEnumerableの.Select()オブジェクトを指しています。 fieldsオブジェクトに対してforeachを実行するたびに、はすべてから開始し、IEnumerableオブジェクトに項目を要求します。これは、ラムダ式の本体を呼び出すことによって行います。

このようなループ中に取得した値を変更しても大丈夫です。彼らはforeachが終了するとすぐに消えます。
が起動すると、それ自身のforeachが実行され、設定したと思われるものの代わりに新しく生成された値が得られます。

1つの修正は、単に.ToArray()または.ToList()を使用してすべてをコレクションにマテリアライズすることです。それだけで、 "オブジェクトの構築方法の定義"ではなく、オブジェクトのコレクションがあります。

var fields = row 
    .ItemArray 
    .Select(field => string.Concat("\"", field.ToString().Replace("\"", "\"\""), "\"")) 
    .ToArray();