1

Linqでクエリしたい(そしてLinqPadで実験したい)マスター詳細関係を持つ2つのテーブル(mysql)があります。問題は、Linq to SQL が次のクエリに対して正しい結果も SQL ステートメントも生成できないことです。

from m in masters
select new {
   m.Code,
   m.Total,
   Value = m.details.Sum(d => d.Qty * d.Price * (1 - 6/100))
}

そしてもう一つ

from m in masters
select new {
   m.Code,
   m.Total,
   Value = m.details.Sum(d => d.Qty * d.Price * 0.94)
}

最初のクエリは後者のように正しい結果を生成しません.LinqPadをチェックインした後の問題は、(1 - 6/100)にコンパイルされた1.0. 誰かが理由を説明できますか?

4

1 に答える 1

2

最初の式は整数演算を使用しているため正しいですが、期待したものではありません。C# は整数リテラルから浮動小数点セマンティクスを推論すると想定しました。2 番目の式は単純な double リテラルです。

In integer math, 6/100is 0, so is 1.分子または分母を double リテラルにすることで、除算式を double 値を使用するように強制(1 - 6/100)する必要があります。

代わりに試してください:

Value = m.details.Sum(d => d.Qty * d.Price * (1 - 6/100.0))

.0二重式にすることに注意してください。

于 2012-09-11T03:41:02.103 に答える