你能帮我理解为什么以下代码在执行期间抛出异常吗?
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'。
答案 0 :(得分:0)
Execute
:在基础数据源上执行指定的表达式。 data.Expression
是ConstantExpression
(持有值)。
您需要传递给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);