一尘不染

动态生成LINQ查询

c#

我们有一个对象

public class SomeObject
{
   public Name {get;set;}
   public City {get;set;}
   public State {get;set}
   //various other parameters.  Let's say there's ~20
}

是否可以在不重新编译源代码的情况下动态创建新的LINQ查询?而是,查询参数来自在数据库中存储和更新的XML结构。

var result = from i in someObj
             where 
             //XML requests Name = 'Bob'...so append this where clause
             name = 'Bob'

能做到吗?


阅读 325

收藏
2020-05-19

共1个答案

一尘不染

这是一个表达式树的解决方案:

var param = Expression.Parameter(typeof(SomeObject), "p");
var exp = Expression.Lambda<Func<SomeObject, bool>>(
    Expression.Equal(
        Expression.Property(param, "Name"),
        Expression.Constant("Bob")
    ),
    param
);
var query = someObj.Where(exp);

我知道它要复杂得多,但这有时可能会有用。

2020-05-19