linq で列の値を計算しようとしています。合計は正しく行われますが、除算または乗算時に誤った値が生成されます。例を以下に示します。
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
DataTable dtWidgets = Get_widgets();
DataTable dtHits = Get_hits();
var hit_rate =
from w in dtWidgets.AsEnumerable()
join h in dtHits.AsEnumerable()
on w[0] equals h[0]
select new
{
Date = w.Field<DateTime>("calendar_date"),
Widgets = w.Field<int>("widgets"),
Hits = h.Field<int>("hits"),
TestSum = w.Field<int>("widgets")+h.Field<int>("hits"),
TestMult = w.Field<int>("widgets") * h.Field<int>("hits")
};
gvWidgets.DataSource = dtWidgets;
gvWidgets.DataBind();
gvHits.DataSource = dtHits;
gvHits.DataBind();
gvLinq.DataSource = hit_rate.ToArray();
gvLinq.DataBind();
}
static DataTable Get_widgets()
{
DataTable widgets = new DataTable();
widgets.Columns.Add("calendar_date", typeof(DateTime));
widgets.Columns.Add("widgets", typeof(int));
widgets.Rows.Add("05/15/2012", 200000);
widgets.Rows.Add("05/16/2012", 210000);
return widgets;
}
static DataTable Get_hits()
{
DataTable hits = new DataTable();
hits.Columns.Add("calendar_date", typeof(DateTime));
hits.Columns.Add("hits", typeof(int));
hits.Rows.Add("05/15/2012", 100000000);
hits.Rows.Add("05/16/2012", 120000000);
return hits;
}
}
戻り値:
ウィジェットが TestSum にヒットした日付 TestMult
2012 年 5 月 15 日 12:00:00 午前 200000 100000000 100200000 -1662697472
2012 年 5 月 16 日 12:00:00 午前 210000 120000000 120210000 1426874368