Try that one, joining with subItems and adding a null item in the case that no subitem exists:
public void Today3()
{
XDocument xDoc = XDocument.Load(@"C:\Results\XMLTry.xml");
var q = from homeItem in xDoc.Descendants("HomeItem")
from subItem in homeItem.Element("Item").Descendants("ItemNumber").Any () ? homeItem.Element("Item").Descendants("ItemNumber") : new List(){null}
select new
{
Description=(string)homeItem.Element("Description"),
Time = (string)homeItem.Element("Time"),
Id=(int)homeItem.Attribute("id"),
ItemId = subItem == null ? "" : (string)subItem.Attribute("id"),
Name = subItem == null ? "" : (string)subItem.Element("Name"),
ItemDescrip = subItem == null ? "" : (string)subItem.Element("ItemDescrip")
};
foreach (var item in q)
Console.WriteLine(@"Description = {0}
Time = {1}
Id = {2}
ItemId = {3}
Name = {4}
ItemDescrip = {5}
--------------", item.Description, item.Time, item.Id, item.ItemId, item.Name, item.ItemDescrip);
}