マークダウン記法になれていないので上手く記事を書けない点についてはご了承🙏
ASP.NET MVCで生クエリではなくLINQ to entitiesを使用したほうがよいと言われて
自分で調べてみたところ、文字列ではなくコードを書くようにSQL文を書く感じだとわかった。(理解が甘いのはわかっている)
ゴールはDBから情報を取得し、Viewに渡してHTMLのテーブルに表示させること。
View側の@modelは使用できないとする。
ここではViewにforeachで回せる形(ienumerable)で渡すことだけを考える。
自分なりに書いてみた。
Controller_文字列Ver
var model = this.db.Database.SqlQuery<ビューモデル名>(@"
select
a.id
,p.name
,p.kana
,p.gender
,p.birthday
,a.code
from
person p
left outer join app a
on
p.personid = a.personid
where
a.code = 'コード名' ").ToList();
this.ViewBag.data = model;
Controller_変更後
var query =
(from p in db.person
join a in db.app
on p.personid equals a.personid
where a.code == 'コード名'
select new
{
id = a.id,
name = p.name,
kana = p.kana,
gender = p.gender,
birthday = p.birthday,
code = a.code
}).ToList();
var VMs = new List<ビューモデル名>();
foreach (var i in query){
ビューモデル名 VM = new ビューモデル名();
VM.id = i.id;
VM.name = i.name;
VM.kana = i.kana;
VM.gender = i.gender;
VM.birthday = i.birthday;
VM.code = i.code;
VMs.Add(VM);
}
this.ViewBag.data = VMs;
変更後で困った点はqueryで取得できたものをそのままViewBagに渡しても、ienumerableではなく、Objectとなってしまっていた。
無理やりListの中に入れて渡したが、改善(Linq自体の機能の理解)の余地がありそう。