【发布时间】:2009-03-18 20:20:17
【问题描述】:
我有一个这样定义的 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
LINQ 查询
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 子句 并指定要返回的字段名称?
【问题讨论】: