【发布时间】:2022-06-10 18:14:57
【问题描述】:
我有一个名为 indexes 的 ExpandoObject 列表。
var indexes = new List<ExpandoObject>();
var x = new ExpandoObject() as IDictionary<string, Object>;
x.Add("name", "elon");
x.Add("prod", "spacex");
indexes.Add(x);
var y = new ExpandoObject() as IDictionary<string, Object>;
y.Add("title", "xx");
y.Add("description", "yy");
indexes.Add(y);
我需要使用queryString 过滤该列表,例如“name eq \“elon\” && prod eq \“spacex\””。
我尝试了类似的方法:
var query = indexes.AsQueryable();
var filteredList = query.Where(queryString);
但它不起作用。如何使用查询字符串过滤 ExpandoObject 列表?
【问题讨论】:
-
请给minimal reproducible example。
AsQueryable是实体框架的一部分,直到 .net7(仍处于预览状态):然后它仍然使用 IEnumerable 来处理像 List 这样的普通集合。为什么不使用普通的 Linq? -
因为我从外部获取查询字符串。它始终是一个字符串术语。我正在尝试在不使用标记器的情况下找到解决方案。
-
name eq \“elon\”是一个什么样的查询字符串呢?你希望 Linq 如何理解它?为什么要使用 ExpandoObjects? -
您好@JHBonarius,我们可以将字符串术语作为谓词应用于
Where来过滤普通对象列表。但在这种情况下,我没有预定义的属性。属性只能决定运行时。 -
过滤诸如
name eq \“elon\”从外部来源捕获的术语。我必须检查列表中是否有满足过滤条件的对象。
标签: c# .net predicate iqueryable expandoobject