小编ope*_*wix的帖子

在另一个IQueryable源上执行表达式

有两个具有相同字段结构的类:WebMessageWebMessageDto.

我有一个可以同时使用这两个类的DataGrid.我有一个RIA服务只能提供WebMessageDto,因为WebMessage有导航特性,它们不能被序列化.

现在,DataGrid应该查询返回的RIA Service方法IQueryable<WebMessageDto>.我需要处理DataGrid的查询并在ORM上执行它Table<WebMessage>,然后将结果转换为WebMessageDto类型并将其返回给DataGrid.

我开始实现自定义IQueryable接口,我可以处理表达式.

public class WebMessageQueryContext
{
    // Executes the expression tree that is passed to it. 
    internal static object Execute(Expression expression, bool isEnumerable)
    {
        // DataContext.WebMessages is a ORM table which returns IQueryable<WebMessage>
        List<WebMessage> list = DataContext.WebMessages.Provider.Execute(expression);

        return WebMessageDto.ConvertFrom(list); // returning List<WebMessageDto>
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码将对此方法进行递归调用.我发现了microsoft的示例,其中可查询的源代码在ExpressionVisitor中发生了变化,现在我将原始源更改为ORM的表.

    protected override Expression VisitConstant(ConstantExpression c)
    {
        if (c.Type == typeof(WebMessageDtoQuerySource<WebMessageDto>))
            return Expression.Constant(DataContext.WebMessages);

        return c;
    }
Run Code Online (Sandbox Code Playgroud)

我执行表达式时遇到异常:

Expression of …

c# linq iqueryable

6
推荐指数
1
解决办法
1200
查看次数

标签 统计

c# ×1

iqueryable ×1

linq ×1