私がやっていることは、Linq を使用してデータベースをエンティティにクエリし、xml ドキュメントを作成することです。以前は "for xml" 句でストア プロシージャを使用し、xmlreader を使用していましたが、現在はデータベースのクエリに 1 つのモデル、Linq to Entities だけを使用しようとしています。
以下のコードは私が思いついた最高のものですが、最初にデータベースにクエリを実行してからXElementを作成するために反復することなく、XMLを一度に構築するためのより良いソリューションを見つけることができなかったのは本当に嫌いです. クラスにはパラメーターなしの作成者がいないため、select で直接 XElements を作成できませんでした。また、私の知る限り、Linq には ToXElement() はありません。
以前に同様のことをした人は、それを行う方法についてより良い考えを持っていますか?
var bus = from bs in db.mela_buddies_store
join mu in db.mela_users on bs.buddyId equals mu.userid
join mup in db.mela_users_picnames on mu.userid equals mup.userid into pics
from up in pics.DefaultIfEmpty()
join bc in db.mela_buddies_store on mu.userid equals bc.buddyId into cntr
from hm in cntr.DefaultIfEmpty()
where bs.userId == lu.guid
group bs by new
{
id = bs.ID,
displayname = mu.displayname,
gender = mu.gender,
picname = up.picname
}
into final
select new {
id = final.Key.id,
displayname = final.Key.displayname,
gender = final.Key.gender,
picname = final.Key.picname,
hm = final.Count()
};
XElement xe = new XElement("buddies",
new XElement("userid", lu.userid),
bus.ToList().Select(bs =>
new XElement("buddy",
new XElement("id", bs.id),
new XElement("displayname", bs.displayname),
new XElement("gender", bs.gender),
new XElement("picname", bs.picname),
new XElement("hm", bs.hm)
)));