Windows phone 7 数据绑定:使用一个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

我有这样的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>
</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(),
    };