喜帳面の日記

50歳越えおやじのASP.NET MVC への挑戦日記です。

Visual Studio Express 2012 for Web でいってみる 30.LinqでViewからレコードを取得する際の注意

ブログにあげるか悩んでましたが、備忘として載せときます。

Linqでデータベース(SQLServer)からデータを取得する場合の注意点です。

当方Linqに不慣れなので、ちょっとややこしいデータの取得について、View側に記述していました。

ところがどうやら、View内にCROSS JOIN やUNIONがあると意図しないレコードを取得してしまう場合があります。

レコードの件数によっては、ちゃんと取得できているように見えるので、厄介です。


対応策としては、Viewをやめてストアドプロシジャにすれば良いのですが、今回は、そのままViewを使用したかったのでアドホックSQL文を発行する方法で回避しました。

<<改定前の記述>>

 var dbdata = from s in db.Viewhoge
              where   s.HogeID == hogeID
              && s.HogeName == hogeName
              select s;
 foreach (var s in dbdata)
 {..割愛..}

<<改定後の記述>>

 string sql = " SELECT * FROM Viewhoge "
            + " WHERE HogeID  = {0} "
            + " AND   HogeName = {1} ";
 var dbdata =db.Database.SqlQuery<ViewhogeClass>(sql, hogeID, hogeName);
 foreach (var s in dbdata)
 {..割愛..}