从LINQ Queryable传递表达式

时间:2015-02-05 15:39:02

标签: c# .net linq entity-framework

我有一个基于Entity Framework构建的Service Repository模式。

该服务具有返回IEnumerable的Find(IQuery查询)等方法。

IQuery对象是我们自己的查询对象类型,我们将字符串转换为IQueryable表达式,该表达式可以使用公开IQueryable的存储库。

我想做的是能够在客户端编写可查询并通过服务传递,以便我们可以利用静态类型和linq样式查询而不是构建我们自己的查询对象形成。

换句话说,我希望能够做到这样的事情:

var query = new List<Type>().Where(x => x.Property == "argument").AsQueryable();
service.find(query);

然后我将查询或它创建的表达式传递给我的存储库并像这样工作。

这种事情是否可行,或者我是否必须从头开始构建表达式?看起来这应该是可能的,但我真的不知道从哪里开始,或者看到如何分享这样一个表达的例子。

1 个答案:

答案 0 :(得分:0)

如果您在尚未实施AsQueryable()的{​​{1}}上致电IEnumerable,那么整个可枚举只会填入IQueryable以及之前的任何LINQ操作不表达为表达树。

如果你在源代码上调用ConstantExpression,那么LINQ操作返回AsQueryable()并使用正确的查询表达式树:

IQueryable