У меня есть XML-документ, определенный так
Файл XML
<TABLE>
<RECORD>
<PAGENUMBER> 1 Of 1</PAGENUMBER>
<OtherFields1>..</OtherFields1>
<OtherFields2>..</OtherFields2>
</RECORD>
<RECORD>
<PAGENUMBER> 1 Of 2</PAGENUMBER>
<OtherFields1>..</OtherFields1>
<OtherFields2>..</OtherFields2>
</RECORD>
<RECORD>
<PAGENUMBER> 2 Of 2</PAGENUMBER>
<OtherFields1>..</OtherFields1>
<OtherFields2>..</OtherFields2>
</RECORD>
<RECORD>
<PAGENUMBER> 1 Of 1</PAGENUMBER>
<OtherFields1>..</OtherFields1>
<OtherFields2>..</OtherFields2>
</RECORD>
</TABLE>
Я пытаюсь создать динамический запрос, в который я могу поместить "Имя поля", "Операнд", "Значение"
в конфигурации, и LINQ может построить предикат на его основе.
Файл конфигурации
<CLAUSES>
<CLAUSE name="PAGENUMBER" operand="!=">Page 1 Of 1</CLAUSE>
<CLAUSE name="OtherFields1" operand="!=">String.Empty</CLAUSE>
</CLAUSES>
Вот ссылка, которую я сейчас использую
LINQ Query
XDocument jobXML = XDocument.Load(JobFile);
List<ClauseObj> clauses = new List<ClauseObj>();
clauses.Add(new ClauseObj { Field = "PAGENUMBER", Operand = "!=", Value = " Page 1 Of 1" });
var q = jobXML.Descendants("RECORD").AsEnumerable();
foreach (var c in clauses)
{
switch (c.Operand)
{
case "!=":
q = q.Where(r => r.Element(c.Field).Value != c.Value);
break;
}
}
как я могу сделать так, чтобы предложения "динамически" читали предложения where
а также укажите, какие имена полей возвращать?