2012年2月2日木曜日

ソースには,DataRowが含まれていません

Linqを使ってデータテーブルの処理をしている途中,エラーが発生してしまいました。

"System.InvalidOperationException: Linq The source contains no DataRows."
ソースには、DataRow が含まれていません。

コーディング中にエラーは出ないのですが,デバッグを始めると状況によってうまくいったりいかなかったりです。
もういちどよくエラーメッセージの意味を考えた結果,Linqで抽出した結果が0だったのが問題だったと分かりました。

Private Sub LinqToDataSet()

    Dim dt1 As New DataTable
    dt1.Columns.Add("Key")
    dt1.Columns.Add("Value")

    For i = 1 To 10
        Dim r As DataRow = dt1.NewRow
        r("Key") = "Key-" & i.ToString("00")
        r("Value") = "Value-" & i.ToString("00")
        dt1.Rows.Add(r)
    Next

    Dim searchKey As String = "Key-99"
    Dim query = dt1.AsEnumerable.Where(Function(el As DataRow) el("Key") = searchKey)
    SetDataRow(query.CopyToDataTable.Rows) 'ここでエラー発生。

End Sub

Private Sub SetDataRow(ByVal rows As DataRowCollection)

    For Each r In rows
        Debug.WriteLine(r("Key") & "|" & r("Value"))
    Next

End Sub

というわけで,結果の数を確認して処理するようにしました。

If query.Count > 0 Then SetDataRow(query.CopyToDataTable.Rows)

単純なことで手間取ってしまい,少々残念です。

0 件のコメント:

コメントを投稿