我正在使用此LINQ语句将XML数据加载到对象中:
var smartFormFields = from smartFormField in xmlDoc.Descendants("smartFormField")
select new Models.SmartFormField
{
IdCode = smartFormField.Element("idCode").Value,
Label = smartFormField.Element("label").Value,
FieldType = smartFormField.Element("fieldType").Value,
DisplayStatus = smartFormField.Element("displayStatus").Value,
RequiredStatus = smartFormField.Element("requiredStatus").Value,
DisplayColumn = (int)smartFormField.Element("displayColumn"),
DisplayOrder = (int)smartFormField.Element("displayOrder"),
Description = smartFormField.Element("description").Value,
Example = smartFormField.Element("example").Value,
ControlType = smartFormField.Element("controlType").Value,
AutoSuggestDataSource = smartFormField.Element("autoSuggestDataSource").Value
};
但是,我的WHERE(和ORDERBY)语句每次都会改变,例如
可能是这样的:
var smartFormFields = from smartFormField in xmlDoc.Descendants("field")
where smartFormField.Element("IdCode").Value == "lastName"
select new Models.SmartFormField
{...
可能是这样的:
var smartFormFields = from smartFormField in xmlDoc.Descendants("field")
where (int)smartFormField.Element("DisplayOrder").Value > 50
select new Models.SmartFormField
{...
等。
如何将Where语句放入变量中,如下所示:
伪码:
string whereStatement = "where (int)smartFormField.Element(\"DisplayOrder\").Value > 50";
var smartFormFields = from smartFormField in xmlDoc.Descendants("field")
&&whereStatement
select new Models.SmartFormField
{...
答案 0 :(得分:3)
你必须把它表达成一个字符串吗?如果您乐意以代表的形式提供,您可以使用:
// Just as one example of a where clause
Func<XElement, bool> whereClause = sff => (int) sff.Element("DisplayOrder").Value > 50;
var smartFormFields = xmlDoc.Descendants("field")
.Where(whereClause)
.Select(sff =>
new Models.SmartFormField
{
IdCode = sff.Element("idCode").Value,
...
});
如果将其放入方法中,则只需使用lambda表达式:
var fields = GetFormFields(sff => (int) sff.Element("DisplayOrder").Value > 50);
等
这样可以让您轻松地为不同的调用提供不同的值,但是如果没有更多的工作,您将无法将表达式放入文本文件中。你有什么真正的要求?你能有一个“过滤器名称”映射到Func<XElement, bool>
,然后在执行时读取过滤器名称吗?或者你真的需要它在执行时以任意方式完全控制吗?
(请注意,排序类似但可能稍微复杂一点......让我们首先对过滤进行排序。)