基于QueryProvider的IQueryable执行表达式

时间:2016-06-22 11:08:19

标签: c# linq-to-objects iqueryable

你能帮我理解为什么以下代码在执行期间抛出异常吗?

IQueryable<TestDto> data = Enumerable.Range(1, 10000).Select(i => new TestDto()
{
        Id = i,
        Name = (i%1000).ToString()
}).AsQueryable();
var test = data.Provider.Execute<TestDto>(data.Expression);

对我来说很奇怪,当QueryProvider和Expression都来自同一个IQueryable实例时,查询提供程序无法执行表达式!

编辑:抛出异常是ArgumentException,考虑方法Execute的参数'expression'。

1 个答案:

答案 0 :(得分:0)

Execute:在基础数据源上执行指定的表达式。 data.ExpressionConstantExpression(持有值)。

您需要传递给Execute一个有效的表达式树,例如可以由提供商进一步解释的filter谓词或Projection

以下是有效用法:

IQueryable<Item> data = Enumerable.Range(1, 10000).Select(i => new Item()
{
        SomeProperty = i
}).AsQueryable();

Expression<Func<Item, bool>> expression = x => x.SomeProperty > 50;

var obj = data.Provider.Execute(expression);