我想动态构建一个 LINQ 查询,这样我就可以做类似的事情
var list = n.Elements().Where(getQuery("a", "b"));
Run Code Online (Sandbox Code Playgroud)
代替
var list = n.Elements().Where(e => e.Name = new "a" || e.Name == "c");
Run Code Online (Sandbox Code Playgroud)
(大多数时候,我需要传递带有命名空间的 XName,而不仅仅是本地名称......)
我的问题是访问数组元素:
private static Func<XElement, bool> getQuery(XName[] names)
{
var param = Expression.Parameter(typeof(XElement), "e");
Expression exp = Expression.Constant(false);
for (int i = 0; i < names.Length; i++)
{
Expression eq = Expression.Equal(
Expression.Property(param, typeof(XElement).GetProperty("Name")!.Name),
/*--->*/ Expression.Variable(names[i].GetType(), "names[i]")
);
}
var lambda = Expression.Lambda<Func<XElement, bool>>(exp, param);
return lambda.Compile();
}
Run Code Online (Sandbox Code Playgroud)
显然变量表达式是错误的,但我很难构建能够访问数组值的表达式。