Reputation: 1776
How to fill Object Array
inside a LINQ Query
Here is my data model
public class Test
{
public string Link { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public Item[] Items { get; set; }
}
public class Item
{
public string Title { get; set; }
public string Link { get; set; }
public string Guid { get; set; }
public DateTime PublishDate { get; set; }
public string Description { get; set; }
}
And here is the Query
var data = from feed in feedXml.Descendants("channel")
select new Rss
{
Title = feed.Element("title").Value,
Link = feed.Element("link").Value,
Description = feed.Element("description").Value,
Items = // here i have to fill the array of items
};
UPDATE xml formate
<channel>
.....
<item>.....</item>
<item>.....</item>
<item>.....</item>
</channel>
<channel>
.....
<item>.....</item>
<item>.....</item>
<item>.....</item>
</channel>
<channel>
.....
<item>.....</item>
<item>.....</item>
<item>.....</item>
</channel>
Upvotes: 4
Views: 2953
Reputation: 101731
You just need to make another query inside of your query. For example if channel
element contains item
elements then you can do:
Items = feed.Elements("item")
.Select(x => new Item { // set property values })
.ToArray()
Update: It seems you are reading a RSS
file, so your query should be something like this:
var data = from feed in feedXml.Descendants("channel")
select new Rss
{
Title = (string) feed.Element("title"),
Link = (string) feed.Element("link"),
Description = (string) feed.Element("description"),
Items = feed.Elements("item")
.Select(
x =>
new Item
{
Title = (string) x.Element("title"),
Link = (string) x.Element("link"),
Description = (string) x.Element("description"),
Guid = (string) x.Element("guid"),
PublishDate = (DateTime) x.Element("pubDate")
})
.ToArray()
};
Also I have used explicit cast instead of trying to access Value
property directly to prevent NullReferenceException
.
Upvotes: 6