[英]How can I add a specific dictionary entry to a Linq Expression?
我正在使用dynamic-linq-query-builder库,并试图从查询的 JSON 表示生成可执行的 Linq 查询。 我不相信这个库支持字典,所以我希望添加这个功能。
我的 JSON 如下所示:
{
"condition": "AND",
"rules": [
{
"id": "Field_1",
"field": "Data[\"Field_1\"].StringValue",
"type": "string",
"input": "text",
"operator": "equal",
"value": "test"
}
],
"valid": true
}
我正在尝试生成这样的 Linq 查询:
.Where(p => p.Data["Field_1"].StringValue == "test")
我真的很想知道如何生成一个System.Linq.Expressions.Expression
来代表树的这个有效硬编码的字典项( Data["Field_1"]
)部分。
我已经阅读了很多文章,并查看了这个 StackOverflow 问题how-do-i-access-a-dictionary-item-using-linq-expressions但解决方案仍然在逃避我。
任何人都可以指出我正确的方向吗? 问题是体现在BuildNestedExpression()
的方法此类。
提前致谢。
更新 13/12/19
我在这方面取得了一些进展,但感觉我正在迅速失去理智。 如前所述,问题体现在BuildNestedExpression()
方法中,该方法目前不支持字典属性。 我正在尝试添加对此的支持。
我很感激我的代码可以大大改善(只是想获得它最初的工作),但我的变化是在GitHub上这里
我做了一个变化,打破了的BuildNestedExpression()
如果我找到一个字典到我的新方法BuildElementAccessExpression()
在这里,我只是尝试将任何字典条目添加到为属性构建的表达式中。 不过,我在这个过程中感到非常困惑(正如您可以从注释掉的代码中看出的那样)。
我添加了一个快速单元测试来说明问题( Dictionary_Test
)。
我不会在这里发布大量代码,因为它在 GitHub 中可用。 任何帮助都会很棒,不要以为我会自己解决这个问题。
我最终遇到了这个问题。 这个过程让我有点头疼,但可以在下面找到创建表达式的工作代码片段。
希望这会在将来为某人节省一些时间。
感谢您对@NetMage 的所有帮助。
var propertyInfo = expression.Type.GetProperty("Data");
var propertyExpression = Expression.Property(expression, propertyInfo);
var dictionaryKeyValue = "dictionaryEntryKey";
var dictionaryKeyConst = Expression.Constant(dictionaryKeyValue);
var dictionary = propertyType.GetInterface("IDictionary`2");
PropertyInfo indexerProperty = dictionary.GetProperty("Item");
var indexExpression = Expression.MakeIndex(propertyExpression, indexerProperty, new[] { dictionaryKeyConst });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.