我正在做的是使用 Linq 查询数据库到实体以构建 xml 文档。在我使用带有“for xml”子句的存储过程和使用 xmlreader 之前,但现在我试图坚持只使用一种模型来查询数据库,Linq to Entities。
现在下面的代码是我能提供的最好的代码,但我真的很讨厌我找不到更好的解决方案来一次构建 XML,而不必先查询数据库,然后迭代创建 XElements。我无法直接在选择中创建 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)
)));