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)
{..割愛..}