编程语言
首页 > 编程语言> > c#-动态LINQ查询

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