こんな感じのクエリがあるとする
var ほげ=linq.テーブル君
.Select(g=>new {
金額 = g.Decimal(10,0)の金額 /g.intの回数
});
これをdecimal型で戻すメソッドで利用したとしよう。
private decimal hogehoge()
{
上のLINQ
}
このメソッドの戻り値はちゃんとdecimalで戻ってくる。
デバッグして見てみても何もおかしいところはない。
そしてこれをTabeleAdapterのUpdateメソッドで更新しようとしたところ
「・・・・・・・・100.000000000000000000000000は 範囲外」だよん。とエラー。
なんだこの数字?と思ってこのLINQちゃんが吐きだすSQL文を見たところ。
SELECT [t0].[金額] / (CONVERT(Decimal(29,4),[t0].[回数])) AS [ほげ金額]
FROM [dbo].[テーブル君] AS [t0]
みたいになってて、こいつを直接SQL叩いた結果が
100.000000000000000000000000
となっている。SQL文からすると正しいと思う。
が。
仮に select 金額/回数 from テーブル君
とCONVERTせずに直接SQLを叩くと
100.00000000000
とちゃんと結果を戻す。
訳わかんなくなってきたが、SQL文としての結果は正しい。
ただ、なぜLINQが吐きだすSQLで (CONVERT(Decimal(29,4),[t0].[回数]))と出るのだろうか?
そう吐きだすものだとしたらそれでも良いけど、LINQ内でCONVERTさせない記述の仕方がわかんない・・・・。
何か方法あるのかな・・・。