c#-动态LINQ查询
作者:互联网
是否可以在运行时创建Linq查询.
使用可以转换为Linq查询的xml规则.
解决方法:
最终,是的.但这并不简单,您需要:
>学习Expression API
>使用预滚动的动态LINQ库(来自示例下载)
如果要选择第一个选项,则需要创建自己的lambda.想象一下,例如,您有类似的事情(在这里制作东西…):
<Filters>
<Add Prop="Foo">My filter value</Add>
</Filters>
然后,您需要执行以下操作:
XElement filters = ...; // the "Filters" element
IQueryable<Customer> query = ...; // your raw (unfiltered) query
foreach(var filter in filters.Elements("Add")) {
var param = Expression.Parameter(typeof(Customer), "row");
var body = Expression.Equal(
Expression.PropertyOrField(param, (string)filter.Attribute("Prop")),
Expression.Constant(filter.Value, typeof(string)));
query = query.Where(Expression.Lambda<Func<Customer, bool>>(
body, param));
}
上面的代码(对于每个“ Add”元素)创建一个lambda,该lambda会将给定成员过滤为所提供的值(假设为字符串,但您当然可以进行任何转换等).所有其他操作都可用,但这显示了最小的影响.请注意,查询在循环中受到限制.
标签:linq-to-objects,c,net 来源: https://codeday.me/bug/20191107/2002431.html