我正在使用实体框架上的 LINQ 处理动态查询。为了通过用户输入过滤器查询一些表,我们使用PredicateBuilder
创建条件 WHERE 部分。这真的很棒,但返回的列数是固定的。
现在,如果我们需要用户在他们的报告中选择他需要的列,除了他们的过滤器,我们就有麻烦了,因为我们不知道如何myQuery.Select( x => new { ... })
像在 Where 子句中那样做动态。
我们怎样才能实现这样的目标?
我正在使用实体框架上的 LINQ 处理动态查询。为了通过用户输入过滤器查询一些表,我们使用PredicateBuilder
创建条件 WHERE 部分。这真的很棒,但返回的列数是固定的。
现在,如果我们需要用户在他们的报告中选择他需要的列,除了他们的过滤器,我们就有麻烦了,因为我们不知道如何myQuery.Select( x => new { ... })
像在 Where 子句中那样做动态。
我们怎样才能实现这样的目标?
稍微搜索一下就会发现这很棘手。匿名类型是在编译时创建的,因此动态创建一个并不容易。这个答案包含一个使用Reflection.emit
.
如果可能的话,我建议只返回类似 a 的东西IDictionary<,>
。