我在做什麼是用Linq查詢數據庫來創建XML文檔的實體。在我用「for xml」子句使用存儲過程並使用xmlreader之前,現在我試圖僅使用一個模型來查詢數據庫,Linq to Entities。Linq(到實體)到XElement的序列化(通過連接和分組)
現在下面的代碼是我可以用的最好的代碼,但我真的很討厭找不到更好的解決方案來一次構建XML,而無需先查詢數據庫,然後迭代創建XElements。 我無法直接在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)
)));
請參閱我對@xeondev的評論。 Linq to Entities(與Linq to SQL不同)不接受參數化構造函數(在select之後)。據我所理解。 –