0

データ検証のためにいくつかの値を連結するために、このクエリ式があります

result.AddRange(from string dr in ercDt
   select dc.Ordinal.ToString() + "|" + dr);

ercDt[0] が DBNull で、これ以上行がないため、このエラーが発生します

タイプ 'System.DBNull' のオブジェクトをタイプ 'System.String' にキャストできません。

私はこれを試しました

result.AddRange(from string dr in ercDt
where dr.Any(x => x != null)
select dc.Ordinal + "|" + dr);

この

result.AddRange(from string dr in ercDt
where ercDt.Any(x => x != null)
select dc.Ordinal + "|" + dr);

この

result.AddRange(from string dr in ercDt
where !(dr is DBNull)
select dc.Ordinal + "|" + dr);

そして運がない、

このエラーの発生を防ぐにはどうすればよいですか? null をまったく照会する必要がないため、この場合の目的の出力はレコードがありません。

ありがとう

編集:

混乱に基づいて、私のケースをよりよく説明します。

'ercDt' は linq クエリ (その linq クエリの結果は文字列であり、DBNull の非常にまれなケース) からのリストであるため、(ToList() メソッドを使用して) リストに変換されるため、'dr' を文字列にキャストできますが、問題は DBNull 値に起因します

4

2 に答える 2

0

私はこれをします:

result.AddRange(from string dr in ercDt
select ((dc.Ordinal == null) ? string.Empty() : dc.Ordinal.ToString()) + 
    "|" + ((dr == null) ? string.Empty() : dr));
于 2015-02-18T15:10:55.103 に答える
0

とにかくうまくいかdrない場合。実行時エラーが発生するはずの をDataRowキャストしDataRowています。Stringとは何ですかercDt(DataTableコンパイラ エラーが発生することさえありました)。とにかくやってみます。

ercDtそれが であると仮定するDataTableと、値を持つすべてのフィールドが必要になると思います DBNull.Value。使用DataRow.IsNull:

DataColumn dc = ercDt.Columns[0]; // i don't know which column you use
var fields = from dr in ercDt.AsEnumerable()
             where !dr.IsNull(dc.Ordinal)
             select dc.Ordinal + "|" + dr[dc].ToString();
result.AddRange(fields);
于 2015-02-18T15:04:45.307 に答える