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;
}