В этот вопрос Джон Скит предложил очень интересное решение для создания динамического оператора LINQ-to-XML, но мои знания о лямбдах и делегатах еще недостаточно развиты для реализации это:
У меня есть пока , но, конечно, я получаю ошибку "smartForm не существует в текущем контексте":
private void LoadWithId(int id)
{
XDocument xmlDoc = null;
try
{
xmlDoc = XDocument.Load(FullXmlDataStorePathAndFileName);
}
catch (Exception ex)
{
throw new Exception(String.Format("Cannot load XML file: {0}", ex.Message));
}
Func<XElement, bool> whereClause = (int)smartForm.Element("id") == id";
var smartForms = xmlDoc.Descendants("smartForm")
.Where(whereClause)
.Select(smartForm => new SmartForm
{
Id = (int)smartForm.Element("id"),
WhenCreated = (DateTime)smartForm.Element("whenCreated"),
ItemOwner = smartForm.Element("itemOwner").Value,
PublishStatus = smartForm.Element("publishStatus").Value,
CorrectionOfId = (int)smartForm.Element("correctionOfId"),
IdCode = smartForm.Element("idCode").Value,
Title = smartForm.Element("title").Value,
Description = smartForm.Element("description").Value,
LabelWidth = (int)smartForm.Element("labelWidth")
});
foreach (SmartForm smartForm in smartForms)
{
_collection.Add(smartForm);
}
}
В идеале Я хочу сказать:
var smartForms = GetSmartForms(smartForm=> (int) smartForm.Element("DisplayOrder").Value > 50);
У меня так далеко, но Я просто не умею ламбда-магию , как мне это сделать?
public List<SmartForm> GetSmartForms(XDocument xmlDoc, XElement whereClause)
{
var smartForms = xmlDoc.Descendants("smartForm")
.Where(whereClause)
.Select(smartForm => new SmartForm
{
Id = (int)smartForm.Element("id"),
WhenCreated = (DateTime)smartForm.Element("whenCreated"),
ItemOwner = smartForm.Element("itemOwner").Value,
PublishStatus = smartForm.Element("publishStatus").Value,
CorrectionOfId = (int)smartForm.Element("correctionOfId"),
IdCode = smartForm.Element("idCode").Value,
Title = smartForm.Element("title").Value,
Description = smartForm.Element("description").Value,
LabelWidth = (int)smartForm.Element("labelWidth")
});
}