2

Linqは初めてなので、これが基本的な場合はお詫びします。このクエリは、結果を列挙するときにエラー{"DBNull.Valueをタイプ'System.Int64'にキャストできません。null許容タイプを使用してください。"}をスローします。

    private void AddLevels(long rootid)
    {
        var results = from row in data.AsEnumerable()
                      where row.Field<long>("ParentID") == rootid
                      select row;

        foreach (DataRow row in results)
        {
            //do stuff
        }

    }

列ParentIDはnullを受け入れます-これらを個別に処理する必要がありますか?

EDIT2:以下の実際のソリューションはまだLinqを使用しています。

編集: Linqを破棄し、代わりにDataTable.Selectステートメントを使用することでこれを解決しました。誰かがパフォーマンスの違いについて意見を持っているなら、私は興味があるでしょう。

4

2 に答える 2

13

クエリで次の行を使用します。

where row.Field<decimal?>("ParentID") == rootid

decimal?はの構文糖衣です。これは、値も許可することを除いて、System.Nullable<decimal>基本的にと同じです。decimalnull

longはまったく別のタイプです。整数のみを表すことができ、10進値を表すことができないため、「指定されたキャストは無効です」というエラーが発生します。

于 2011-08-17T10:37:15.963 に答える
0

long rootidはnull許容型ですか?その場合、nullを受け入れることができるのはそれだけである必要があります

于 2011-08-17T10:36:55.020 に答える