2016-04-18 8 views
-1

DataTable ordersを持っていて、ラムダ式を使用してループなしでレコードをフィルタリングしています。 if条件の最初の行は正常に動作し、有効なレコードを返します。指定されたキャストは、列値をフェッチするときにDataRow Listのラムダ式では無効です

if (orders.Rows.Count > 0) 
{ 
    //This line returns a record 
    var defaultOrder = orders.Rows.Cast<DataRow>().Where(p => p.Field<bool>("IsDefault")).ToList(); 
    //The line below gives me an exception Specified cast is not valid. 
    var defaultOrderID = orders.Rows.Cast<DataRow>().Where(p => p.Field<bool>("IsDefault")).Select(p => p.Field<long>("OrderID")).FirstOrDefault(); 
} 

今、私はこのレコードから特定の列の値を取得したいが、私は例外に

enter image description here

PSを次のようになっている:私はDBに見ることができますし、デバッグモードでdefaultOrder変数OrderIDの値はです。 データタイプIsDefaultビットであり、OrderIDデータベースです。両方ともではないです。

+1

データベーステーブルのIsDefaultとOrderIdのフィールドタイプは何ですか? – user824910

+0

詳細は –

答えて

1

p.Field<long>("OrderID") 

を交換され、 行はありません持っています。任意の1レコード、列のプロパティを展開し、フィールド "OrderID"を選択し、そのデータ型をチェックします。

DBに値4があり、データ型がInt32である必要があるため、エラーが長く発生する場合は、その値を使用します。

var defaultOrderID = orders.Rows.Cast<DataRow>().Where(p => p.Field<bool>("IsDefault")).Select(p => p.Field<Int32>("OrderID")).FirstOrDefault(); 
+0

に更新ありがとう@SumerSingh。それは働いた:) –

+0

ようこそ..... :) – sumngh

1

OrderID場合int

のタイプはあなたがフィールドのDataRowで "受注コード" のデータ型を確認することができます

p.Field<int>("OrderID") 
関連する問題