Windows phone 7 数据绑定:使用一个XML节点中的值查找另一个XML节点
我有这样的XML:Windows phone 7 数据绑定:使用一个XML节点中的值查找另一个XML节点,windows-phone-7,Windows Phone 7,我有这样的XML: <showcases> <showcase id="260"> <artistID>2143</artistID> <venueID>29</venueID> <startdatetime>2012-09-12 17:30:00</startdatetime> <enddatetime>2012-09-12 18:00:00</enddatetime> &l
<showcases>
<showcase id="260">
<artistID>2143</artistID>
<venueID>29</venueID>
<startdatetime>2012-09-12 17:30:00</startdatetime>
<enddatetime>2012-09-12 18:00:00</enddatetime>
</showcase>
[etc]
</showcases>
var showcasedata = from query in loadedData.Descendants("showcase")
select new Showcase
{
StartDateTime = (DateTime)query.Element("startdatetime"),
ArtistName = ????,
Venue = ????
};
ShowcasesList.ItemsSource = showcasedata.ToList();
我想一定有办法,但我找不到
谢谢。快速肮脏的方式: var showcasedata=来自loadedData.DegenantsShowcase中的查询 选择新的Showcase { StartDateTime=DateTimequery.Elementstartdatetime, ArtistName=stringloadedData.Elementsshowcaseartist.Firste=>stringe.Attributeid==stringquery.ElementartistID }; ShowcasesList.ItemsSource=showcasedata.ToList; 它应该适用于小型XML文档,但在大型文档上很快就会遇到性能问题。对于这些,请使用字典进行缓存: var artists=loadedData.elementsshowcaseastr.ToDictionarye=>string.Attributeid,e=>e; var showcasedata=来自loadedData.DegenantsShowcase中的查询 选择新的Showcase { StartDateTime=DateTimequery.Elementstartdatetime, ArtistName=stringartists[stringquery.Attributeid].ElementartistID };
将艺术家对象放在字典中比放在XML节点中更好。根据您的模型对象调整代码。说您的类看起来像
public class Showcase
{
public DateTime StartDateTime;
public string ArtistName;
public string Venue;
}
试试这个
var showcasedata =
from query1 in loadedData.Descendants("showcase")
select new Showcase() {
StartDateTime = (DateTime)query1.Element( "startdatetime" ),
ArtistName = ( from query2 in loadedData.Descendants("showcaseartist")
where (int)query1.Element( "artistID" ) == (int)query2.Attribute("id")
select (string)query2.Element("name") ).First(),
Venue = ( from query3 in loadedData.Descendants("venue")
where (int)query1.Element( "venueID" ) == (int)query3.Attribute("id")
select (string)query3.Element("name") ).First(),
};
var showcasedata =
from query1 in loadedData.Descendants("showcase")
select new Showcase() {
StartDateTime = (DateTime)query1.Element( "startdatetime" ),
ArtistName = ( from query2 in loadedData.Descendants("showcaseartist")
where (int)query1.Element( "artistID" ) == (int)query2.Attribute("id")
select (string)query2.Element("name") ).First(),
Venue = ( from query3 in loadedData.Descendants("venue")
where (int)query1.Element( "venueID" ) == (int)query3.Attribute("id")
select (string)query3.Element("name") ).First(),
};