Help for writing a LINQ query !
-
Hello. I have a XML file like this :
<XML>
<Part ID="1" />
<Part ID="2" />
<Part ID="3" />
<Part ID="4" />
<Part ID="5" />
<Part ID="6" />
<Part ID="7" />
.
.
.
</XML>I'm gonna select the
Part
element with maximumID
. I've used this query, but it's wrong.XElement xElement = XElement.Parse(xmlSTR);
var max = from q in xElement.Descendants("Part" )
where q.Attribute("ID" ).Value == q.Attributes("ID" ).Max().Value
select q;
Console.WriteLine(max.First());what do you suggest ? thank you.
-
Hello. I have a XML file like this :
<XML>
<Part ID="1" />
<Part ID="2" />
<Part ID="3" />
<Part ID="4" />
<Part ID="5" />
<Part ID="6" />
<Part ID="7" />
.
.
.
</XML>I'm gonna select the
Part
element with maximumID
. I've used this query, but it's wrong.XElement xElement = XElement.Parse(xmlSTR);
var max = from q in xElement.Descendants("Part" )
where q.Attribute("ID" ).Value == q.Attributes("ID" ).Max().Value
select q;
Console.WriteLine(max.First());what do you suggest ? thank you.
XAttribute.Value is always a string. You need to convert to an integer.
XElement e = XElement.Parse(xmlSTR);
// get elements as integers var values = from q in e.Descendants("Part") select Convert.ToInt32(q.Attribute("ID").Value); Console.WriteLine("Found {0} elements", values.Count()); // get highest value var highest = values.Max(); Console.WriteLine("Highest value is {0}", highest); // get Part element with highest var highestElement = (from q in e.Descendants("Part") where q.Attribute("ID").Value == highest.ToString() select q).First(); //report Console.WriteLine("Highest element: {0}", highestElement.ToString()); Console.ReadKey();
'Howard
-
XAttribute.Value is always a string. You need to convert to an integer.
XElement e = XElement.Parse(xmlSTR);
// get elements as integers var values = from q in e.Descendants("Part") select Convert.ToInt32(q.Attribute("ID").Value); Console.WriteLine("Found {0} elements", values.Count()); // get highest value var highest = values.Max(); Console.WriteLine("Highest value is {0}", highest); // get Part element with highest var highestElement = (from q in e.Descendants("Part") where q.Attribute("ID").Value == highest.ToString() select q).First(); //report Console.WriteLine("Highest element: {0}", highestElement.ToString()); Console.ReadKey();
'Howard
Thank you. So we can't do it within one query ?
-
XAttribute.Value is always a string. You need to convert to an integer.
XElement e = XElement.Parse(xmlSTR);
// get elements as integers var values = from q in e.Descendants("Part") select Convert.ToInt32(q.Attribute("ID").Value); Console.WriteLine("Found {0} elements", values.Count()); // get highest value var highest = values.Max(); Console.WriteLine("Highest value is {0}", highest); // get Part element with highest var highestElement = (from q in e.Descendants("Part") where q.Attribute("ID").Value == highest.ToString() select q).First(); //report Console.WriteLine("Highest element: {0}", highestElement.ToString()); Console.ReadKey();
'Howard
Hi Howard; This should do what you want.
XElement xElement = XElement.Parse(xmlSTR);
var max = (from q in xElement.Descendants("Part")
let val = Convert.ToInt32(q.Attribute("ID").Value)
orderby val descending
select q).First();MessageBox.Show(max.ToString());
Fernando
-
Hi Howard; This should do what you want.
XElement xElement = XElement.Parse(xmlSTR);
var max = (from q in xElement.Descendants("Part")
let val = Convert.ToInt32(q.Attribute("ID").Value)
orderby val descending
select q).First();MessageBox.Show(max.ToString());
Fernando
Thanks but it wasn't me that asked
'Howard
-
Thank you. So we can't do it within one query ?
I wrote it as separate ones for clarity - you can just replace the variables in the later queries for the original query - just like subqueries in SQL for example.
'Howard
-
Hi Howard; This should do what you want.
XElement xElement = XElement.Parse(xmlSTR);
var max = (from q in xElement.Descendants("Part")
let val = Convert.ToInt32(q.Attribute("ID").Value)
orderby val descending
select q).First();MessageBox.Show(max.ToString());
Fernando
Great, thanks
-
Hello. I have a XML file like this :
<XML>
<Part ID="1" />
<Part ID="2" />
<Part ID="3" />
<Part ID="4" />
<Part ID="5" />
<Part ID="6" />
<Part ID="7" />
.
.
.
</XML>I'm gonna select the
Part
element with maximumID
. I've used this query, but it's wrong.XElement xElement = XElement.Parse(xmlSTR);
var max = from q in xElement.Descendants("Part" )
where q.Attribute("ID" ).Value == q.Attributes("ID" ).Max().Value
select q;
Console.WriteLine(max.First());what do you suggest ? thank you.
Hi Mohammad; This should do what you want.
XElement xElement = XElement.Parse(xmlSTR);
var max = (from q in xElement.Descendants("Part")
let val = Convert.ToInt32(q.Attribute("ID").Value)
orderby val descending
select q).First();MessageBox.Show(max.ToString());
Fernando
-
Great, thanks
Not a problem, glad to help.