EntityFrameworkにおけるSQLの直接実行

ちょっぴり落とし穴が。

SELECT
    fo.GroupingItem
  , AVG(fo.AverageItem)
FROM
  FooTable as fo
GROUP BY
  fo.GroupingItem

こんなSQLを発行したとする。 結果セットは

GroupingItem 列名無し
foo 1
bar 2
baz 3

こんな感じになったとする。これをEntityFrameworkでどうにかする場合、

public class Results {
  public string GroupingItem {get;set;}
  public int AverageItem {get;set;}
}

こんなクラスを書いてマッピングする。さて、既にここで落とし穴が! 平均の結果が、マッピングされない。しかも、エラーも何も無しで0が入る(恐らく初期値)。ものすんげぇ悩んだけど、名前が消失するケースでは

SELECT
    fo.GroupingItem
  , AVG(fo.AverageItem) as AverageItem
FROM
  FooTable as fo
GROUP BY
  fo.GroupingItem

この様にちゃんと名前を付け直してあげよう。はぁ。 単に列の順番でマッピングしていって型が合わなければ弾く、とかそんな処理を想像していた。予想以上にちゃんとしてるのね。……なら、エラーぐらいは出して欲しいもんだけども。