C#OData:获取OData结果非常慢

C#OData:获取OData结果非常慢,c#,entity-framework,mapping,odata,C#,Entity Framework,Mapping,Odata,我有以下行动: [EnableQuery] public IHttpActionResult Get() { var ordWeb = orderCtx.ORDER.AsQueryable(); var ordWebDTO =ordWeb.ProjectTo<ORDER>(mapper.ConfigurationProvider); return Ok(ordWebDTO.toList); } 在ORDER\u WEB模型中,我有: public

我有以下行动:

[EnableQuery]
 public IHttpActionResult Get()
 {
     var ordWeb = orderCtx.ORDER.AsQueryable();
     var ordWebDTO =ordWeb.ProjectTo<ORDER>(mapper.ConfigurationProvider);
     return Ok(ordWebDTO.toList);
 }
ORDER\u WEB
模型中,我有:

public class ORDER_WEB
{
        ...
        ...

        public string ValueFromEntityFrameworkModel  {get; set;}

        public string Set_ORDER
        {
            get
            {
                ORDER_TYPE tipo = new ORDER_TYPE();
                return tipo.GetData(ValueFromEntityFrameworkModel);
            }
            set { }
}
如果没有
toList()
它将无法工作。。。 因此,OData处理所有记录,并在分配值映射后,包括
Set\u ORDER

问题是:在赋值映射之后,是否可以使用很少的记录执行OData查询(使用属性/参数)


我希望澄清…

您的代码示例中存在错误,但如果这准确反映了您在实际代码示例中所做的事情,那么

ordWebDTO.ToList()
将转到数据库并检索所有35k记录,然后应用您希望应用的OData筛选器。与之相比:

[EnableQuery]
public IQueryable<ORDER> Get()
{
    var ordWeb = orderCtx.ORDER.AsQueryable();
    var ordWebDTOs =ordWeb.ProjectTo<ORDER>(mapper.ConfigurationProvider);
    return ordWebDTOs;
}
[启用查询]
公共IQueryable Get()
{
var ordWeb=orderCtx.ORDER.AsQueryable();
var ordWebDTOs=ordWeb.ProjectTo(mapper.ConfigurationProvider);
返回ordWebDTOs;
}

这将返回一个IQueryable,OData过滤器将应用于该IQueryable,因此当列表具体化时,它是对数据库的有效查询

非常感谢@CPerson。但是,我忘了指定,在映射中,我在映射期间“动态”计算了一个值。换句话说,如果没有toList()方法,它将无法工作。
[EnableQuery]
public IQueryable<ORDER> Get()
{
    var ordWeb = orderCtx.ORDER.AsQueryable();
    var ordWebDTOs =ordWeb.ProjectTo<ORDER>(mapper.ConfigurationProvider);
    return ordWebDTOs;
}