Вы можете проверить, есть ли у listings
какие-либо данные, изучив результат метода Count()
для переменной listings
, и ответить на вопрос, заданный в разделе комментариев ниже: «Таким образом, нет способа на самом деле вернуть null
? Я должен вернуть List<listing>()
объект? ", пожалуйста, смотрите следующий код:
public List<Listing> GetList()
{
if (File.Exists(this.xmlFilePath))
{
XDocument doc = XDocument.Load(this.xmlFilePath);
var listings = from row in doc.Root.Elements("listing")
select new Listing
{
A = (string)row.Element("A"),
B = (string)row.Element("B"),
C = (string)row.Element("C"),
D = (string)row.Element("D"),
E = (string)row.Element("E")
};
// Check if we have any matches
if(listings.Count() > 0)
{
return listings.ToList();
}
return null;
}
return null;
}
Я думаю, это то, что вы ищете.
Не так много объяснений о том, как работает код. В первой части запроса:
var listings = from row in doc.Root.Elements("listing")
Выражение doc.Root.Elements("listing")
выделяет все элементы <listing>
ниже корня документа (<Listings>
).
Вторая часть запроса создает новый объект Listing
для каждого элемента <listing>
и присваивает внутренний текст каждого из дочерних элементов A,B,C,D
и E
каждому из A,B,C,D
и * 1024. * свойства каждого нового Listing
созданного объекта.
Строка, содержащая: return listings.ToList();
возвращает общий List<T>
из Listing
объектов.
Используя предоставленный пример XML, вы обнаружите, что для каждого Listing
объекта A,B,C,D,
и E
свойства будут null
. Это связано с тем, что регистр символов каждого из селекторов row.Element()
отличается от запрашиваемого XML, т. Е. Ваш XML имеет <a>
, а row.Element("A")
использует верхний регистр 'A'
. Соответствие узла XML в LINQ to XML чувствительно к регистру.