The query I am trying to run is to get all the <Member> elements of an artist with a given ID. This is the query I have (I have a Member class):
string artistID = ddlArtists.SelectedValue;
var members = from artist in this._xDoc.Elements("Artist")
where artist.Attribute("ID").Value == artistID.ToString()
select new Member
{
MemberID = Convert.ToInt32(artist.Element("Member").Attribute("ID").Value),
MemberName = artist.Element("Member").Attribute("Name").Value,
MemberInstrument = artist.Element("Member").Attribute("Instrument").Value
};
However, my result enumeration contains no elements. Am I doing something wrong? Is there an easier way to get a collection of Member objects for an artist with a given ID value? Thanks for any and all help. I've scoured the web for LINQ to XML examples
and haven't come up with a proper solution as of yet, though I will continue to bang my head against this.
James
ASP.NET 3.5 ExtensionsLINQLINQ : Return Value
Please make sure to click the "Mark As Answer" button if this post helps you. It informs others that the question has been answered.
The Element method is looking for child elements, so try using:
<div style="BORDER-RIGHT: black 1pt solid; BORDER-TOP: black 1pt solid; FONT-SIZE: 8pt; BORDER-LEFT: black 1pt solid; BORDER-BOTTOM: black 1pt solid; FONT-FAMILY: monospace; BACKGROUND-COLOR: #d3d3bd">var
members = from artist in xdoc.Elements("Collection").Elements("Artist") where artist.Attribute("ID").Value == artistID.ToString() selectnew
{
MemberID = Convert.ToInt32(artist.Element("Member").Attribute("ID").Value),
MemberName = artist.Element("Member").Attribute("Name").Value
}; </div>
or
<div style="BORDER-RIGHT: black 1pt solid; BORDER-TOP: black 1pt solid; FONT-SIZE: 8pt; BORDER-LEFT: black 1pt solid; BORDER-BOTTOM: black 1pt solid; FONT-FAMILY: monospace; BACKGROUND-COLOR: #d3d3bd">var
members = from artist in xdoc.Descendants("Artist") where artist.Attribute("ID").Value == artistID selectnew {
MemberID = Convert.ToInt32(artist.Element("Member").Attribute("ID").Value),
MemberName = artist.Element("Member").Attribute("Name").Value,
}; </div>
Hope that helps,
Scott
http://www.OdeToCode.com/blogs/scott/
http://twitter.com/OdeToCode
InternetH3ro
Member
83 Points
65 Posts
Seemingly simple LINQ to XML query?
Mar 18, 2008 07:50 PM|LINK
Hey all, I have what I think should be a simple LINQ to XML query, but I'm not getting any results in my enumeration.
Here's my XML:
<Collection> <Artist ID="1" Name="Dream Theater"> <Member ID="1" Name="John Petrucci" /> <Member ID="2" Name="Mike Portnoy" /> </Artist> <Artist ID="2" Name="Opeth"> <Member ID="3" Name="Mikael Akerfeldt" /> <Member ID="4" Name="Martin Mendez" /> </Artist> <Artist ID="3" Name="Porcupine Tree"> <Member ID="5" Name="Steven Wilson" /> <Member ID="6" Name="Gavin Harrison" /> </Artist> </Collection>The query I am trying to run is to get all the <Member> elements of an artist with a given ID. This is the query I have (I have a Member class):
However, my result enumeration contains no elements. Am I doing something wrong? Is there an easier way to get a collection of Member objects for an artist with a given ID value? Thanks for any and all help. I've scoured the web for LINQ to XML examples and haven't come up with a proper solution as of yet, though I will continue to bang my head against this.
James
ASP.NET 3.5 Extensions LINQ LINQ : Return Value
bitmask
Contributor
6739 Points
1245 Posts
MVP
Re: Seemingly simple LINQ to XML query?
Mar 19, 2008 05:29 PM|LINK
James:
The Element method is looking for child elements, so try using:
<div style="BORDER-RIGHT: black 1pt solid; BORDER-TOP: black 1pt solid; FONT-SIZE: 8pt; BORDER-LEFT: black 1pt solid; BORDER-BOTTOM: black 1pt solid; FONT-FAMILY: monospace; BACKGROUND-COLOR: #d3d3bd">var members =
from artist in xdoc.Elements("Collection").Elements("Artist")
where artist.Attribute("ID").Value == artistID.ToString()
select new
{
MemberID = Convert.ToInt32(artist.Element("Member").Attribute("ID").Value),
MemberName = artist.Element("Member").Attribute("Name").Value
};
</div>
or
<div style="BORDER-RIGHT: black 1pt solid; BORDER-TOP: black 1pt solid; FONT-SIZE: 8pt; BORDER-LEFT: black 1pt solid; BORDER-BOTTOM: black 1pt solid; FONT-FAMILY: monospace; BACKGROUND-COLOR: #d3d3bd">var members =from artist in xdoc.Descendants("Artist")
where artist.Attribute("ID").Value == artistID
select new
{
MemberID = Convert.ToInt32(artist.Element("Member").Attribute("ID").Value),
MemberName = artist.Element("Member").Attribute("Name").Value,
};
</div>
Hope that helps,
http://www.OdeToCode.com/blogs/scott/
http://twitter.com/OdeToCode