+-

是否可以在运行时创建 Linq查询.
使用可以转换为Linq查询的xml规则.
使用可以转换为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会将给定成员过滤为所提供的值(假设为字符串,但您当然可以进行任何转换等).所有其他操作都可用,但这显示了最小的影响.请注意,查询在循环中受到限制.
点击查看更多相关文章
转载注明原文:c#-动态LINQ查询 - 乐贴网