2017-05-15 9 views
2

を行うにはどのように私は、SQLでクエリを持って、 は、以下のコード合計は、変換

です

問題は、このコードを実行すると、「指定されたキャストは無効です」というメッセージが表示されます。おそらく、セクション

Sum(z => z.Field<int>("Sub_Key_Value") 

には、データベースから文字列として来ているとので、合計
にこれは、そのように起こっているかなりのおかげ

+0

これは何について: '和(Z => int.Parse(z.Field ( "Sub_Key_Value")))'や '和(Z => Convert.ToInt32(z.Field (「Sub_Key_Value ")))'?フィールド型は 'NVARCHAR'なので、' Sum'を行う前に 'int'への変換が必要です。 –

答えて

2

Fieldintへの変換を行いませんので。

int sum = dt.Rows.Cast<DatRow>().Sum(r => "Staffing".Equals(r["Parent_Tab"]) 
       && "BM".Equals(r["Sub_Key_Name"]) ? Convert.ToInt32(r["Sub_Key_Value"]) : 0); 
+0

@Saurabh LINQとデータ拡張には小さなオーバーヘッドがあるため、 – Slai

2

がどのようにLINQで合計を取得するために、任意のアイデアを得るためにintとしてそれをキャストカントデータベース内のSub_Key_Valueは整数型でなくてもよく、そうでなければ整数に変換することはできません。列の型がVarcharであるとし、上記のクエリを適用します。今度は.Field<string>を使用してその列の値にアクセスできますが、Sum()はいくつかの数値があると予想しているため、変換メカニズムを使用して整数に変換する必要があります。ここではあなたのためのサンプルコードは次のとおりです。

.Sum(z => int.Parse(z.Field<string>("Sub_Key_Value"))